chore(i18n): refresh id translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-21 17:48:23 +00:00
parent ce2d18c0e5
commit f0de182db5
5 changed files with 780 additions and 745 deletions

File diff suppressed because it is too large Load Diff

View File

@ -4,10 +4,10 @@ read_when:
summary: Penyiapan Slack dan perilaku runtime (Socket Mode + URL Permintaan HTTP)
title: Slack
x-i18n:
generated_at: "2026-04-21T09:15:58Z"
generated_at: "2026-04-21T17:45:35Z"
model: gpt-5.4
provider: openai
source_hash: 2fe3c3c344e1c20c09b29773f4f68d2790751e76d8bbaa3c6157e3ff75978acf
source_hash: f30b372a3ae10b7b649532181306e42792aca76b41422516e9633eb79f73f009
source_path: channels/slack.md
workflow: 15
---
@ -18,7 +18,7 @@ Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode
<CardGroup cols={3}>
<Card title="Pairing" icon="link" href="/id/channels/pairing">
DM Slack default ke mode pairing.
DM Slack secara default menggunakan mode pairing.
</Card>
<Card title="Slash commands" icon="terminal" href="/id/tools/slash-commands">
Perilaku perintah native dan katalog perintah.
@ -34,11 +34,11 @@ Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode
<Tab title="Socket Mode (default)">
<Steps>
<Step title="Buat aplikasi Slack baru">
Di pengaturan aplikasi Slack tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
- pilih **from a manifest** dan pilih workspace untuk aplikasi Anda
- tempel [contoh manifest](#manifest-and-scope-checklist) dari bawah lalu lanjutkan untuk membuat
- buat **App-Level Token** (`xapp-...`) dengan `connections:write`
- hasilkan **App-Level Token** (`xapp-...`) dengan `connections:write`
- instal aplikasi lalu salin **Bot Token** (`xoxb-...`) yang ditampilkan
</Step>
@ -80,7 +80,7 @@ openclaw gateway
<Tab title="HTTP Request URLs">
<Steps>
<Step title="Buat aplikasi Slack baru">
Di pengaturan aplikasi Slack tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
- pilih **from a manifest** dan pilih workspace untuk aplikasi Anda
- tempel [contoh manifest](#manifest-and-scope-checklist) lalu perbarui URL sebelum membuat
@ -106,9 +106,9 @@ openclaw gateway
```
<Note>
Gunakan path webhook unik untuk HTTP multi-akun
Gunakan jalur webhook unik untuk HTTP multi-akun
Beri setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar registrasi tidak bertabrakan.
Beri setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar pendaftaran tidak bertabrakan.
</Note>
</Step>
@ -291,12 +291,12 @@ openclaw gateway
### Pengaturan manifest tambahan
Menampilkan fitur berbeda yang memperluas default di atas.
Tampilkan fitur berbeda yang memperluas default di atas.
<AccordionGroup>
<Accordion title="Native slash command opsional">
<Accordion title="Slash command native opsional">
Beberapa [native slash command](#commands-and-slash-behavior) dapat digunakan sebagai pengganti satu perintah terkonfigurasi dengan beberapa nuansa:
Beberapa [slash command native](#commands-and-slash-behavior) dapat digunakan sebagai pengganti satu perintah yang dikonfigurasi, dengan beberapa nuansa:
- Gunakan `/agentstatus` alih-alih `/status` karena perintah `/status` dicadangkan.
- Tidak lebih dari 25 slash command dapat disediakan sekaligus.
@ -315,11 +315,11 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/reset",
"description": "Reset sesi saat ini"
"description": "Setel ulang sesi saat ini"
},
{
"command": "/compact",
"description": "Compaction konteks sesi",
"description": "Compact konteks sesi",
"usage_hint": "[instructions]"
},
{
@ -328,17 +328,17 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/session",
"description": "Kelola masa berlaku pengikatan thread",
"usage_hint": "idle <duration|off> atau max-age <duration|off>"
"description": "Kelola kedaluwarsa pengikatan thread",
"usage_hint": "idle <duration|off> or max-age <duration|off>"
},
{
"command": "/think",
"description": "Atur level berpikir",
"description": "Atur level pemikiran",
"usage_hint": "<level>"
},
{
"command": "/verbose",
"description": "Aktifkan/nonaktifkan output verbose",
"description": "Alihkan output verbose",
"usage_hint": "on|off|full"
},
{
@ -348,12 +348,12 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/reasoning",
"description": "Aktifkan/nonaktifkan visibilitas reasoning",
"description": "Alihkan visibilitas reasoning",
"usage_hint": "[on|off|stream]"
},
{
"command": "/elevated",
"description": "Aktifkan/nonaktifkan mode elevated",
"description": "Alihkan mode elevated",
"usage_hint": "[on|off|ask|full]"
},
{
@ -368,7 +368,7 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/models",
"description": "Daftarkan provider atau model untuk suatu provider",
"description": "Daftarkan provider atau model untuk provider",
"usage_hint": "[provider] [page] [limit=<n>|size=<n>|all]"
},
{
@ -381,12 +381,12 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/tools",
"description": "Tampilkan apa yang dapat digunakan agent saat ini",
"description": "Tampilkan yang dapat digunakan agent saat ini",
"usage_hint": "[compact|verbose]"
},
{
"command": "/agentstatus",
"description": "Tampilkan status runtime, termasuk penggunaan/kuota provider bila tersedia"
"description": "Tampilkan status runtime, termasuk penggunaan/kuota provider saat tersedia"
},
{
"command": "/tasks",
@ -394,7 +394,7 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/context",
"description": "Jelaskan bagaimana konteks dirakit",
"description": "Jelaskan bagaimana konteks disusun",
"usage_hint": "[list|detail|json]"
},
{
@ -413,7 +413,7 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/usage",
"description": "Kontrol footer penggunaan atau tampilkan ringkasan biaya",
"description": "Kendalikan footer penggunaan atau tampilkan ringkasan biaya",
"usage_hint": "off|tokens|full|cost"
}
]
@ -432,12 +432,12 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/reset",
"description": "Reset sesi saat ini",
"description": "Setel ulang sesi saat ini",
"url": "https://gateway-host.example.com/slack/events"
},
{
"command": "/compact",
"description": "Compaction konteks sesi",
"description": "Compact konteks sesi",
"usage_hint": "[instructions]",
"url": "https://gateway-host.example.com/slack/events"
},
@ -448,19 +448,19 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/session",
"description": "Kelola masa berlaku pengikatan thread",
"usage_hint": "idle <duration|off> atau max-age <duration|off>",
"description": "Kelola kedaluwarsa pengikatan thread",
"usage_hint": "idle <duration|off> or max-age <duration|off>",
"url": "https://gateway-host.example.com/slack/events"
},
{
"command": "/think",
"description": "Atur level berpikir",
"description": "Atur level pemikiran",
"usage_hint": "<level>",
"url": "https://gateway-host.example.com/slack/events"
},
{
"command": "/verbose",
"description": "Aktifkan/nonaktifkan output verbose",
"description": "Alihkan output verbose",
"usage_hint": "on|off|full",
"url": "https://gateway-host.example.com/slack/events"
},
@ -472,13 +472,13 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/reasoning",
"description": "Aktifkan/nonaktifkan visibilitas reasoning",
"description": "Alihkan visibilitas reasoning",
"usage_hint": "[on|off|stream]",
"url": "https://gateway-host.example.com/slack/events"
},
{
"command": "/elevated",
"description": "Aktifkan/nonaktifkan mode elevated",
"description": "Alihkan mode elevated",
"usage_hint": "[on|off|ask|full]",
"url": "https://gateway-host.example.com/slack/events"
},
@ -512,13 +512,13 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/tools",
"description": "Tampilkan apa yang dapat digunakan agent saat ini",
"description": "Tampilkan yang dapat digunakan agent saat ini",
"usage_hint": "[compact|verbose]",
"url": "https://gateway-host.example.com/slack/events"
},
{
"command": "/agentstatus",
"description": "Tampilkan status runtime, termasuk penggunaan/kuota provider bila tersedia",
"description": "Tampilkan status runtime, termasuk penggunaan/kuota provider saat tersedia",
"url": "https://gateway-host.example.com/slack/events"
},
{
@ -528,7 +528,7 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/context",
"description": "Jelaskan bagaimana konteks dirakit",
"description": "Jelaskan bagaimana konteks disusun",
"usage_hint": "[list|detail|json]",
"url": "https://gateway-host.example.com/slack/events"
},
@ -551,7 +551,7 @@ Menampilkan fitur berbeda yang memperluas default di atas.
},
{
"command": "/usage",
"description": "Kontrol footer penggunaan atau tampilkan ringkasan biaya",
"description": "Kendalikan footer penggunaan atau tampilkan ringkasan biaya",
"usage_hint": "off|tokens|full|cost",
"url": "https://gateway-host.example.com/slack/events"
}
@ -562,8 +562,8 @@ Menampilkan fitur berbeda yang memperluas default di atas.
</Tabs>
</Accordion>
<Accordion title="Scope authorship opsional (operasi tulis)">
Tambahkan scope bot `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agent aktif (username dan ikon kustom) alih-alih identitas aplikasi Slack default.
<Accordion title="Scope penulisan atribusi opsional (operasi tulis)">
Tambahkan bot scope `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agent aktif (nama pengguna dan ikon kustom) alih-alih identitas default aplikasi Slack.
Jika Anda menggunakan ikon emoji, Slack mengharapkan sintaks `:emoji_name:`.
</Accordion>
@ -587,9 +587,9 @@ Menampilkan fitur berbeda yang memperluas default di atas.
- Mode HTTP memerlukan `botToken` + `signingSecret`.
- `botToken`, `appToken`, `signingSecret`, dan `userToken` menerima string plaintext
atau objek SecretRef.
- Token config mengesampingkan fallback env.
- Token konfigurasi mengesampingkan fallback env.
- Fallback env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` hanya berlaku untuk akun default.
- `userToken` (`xoxp-...`) hanya config (tanpa fallback env) dan default ke perilaku hanya-baca (`userTokenReadOnly: true`).
- `userToken` (`xoxp-...`) hanya untuk config (tanpa fallback env) dan default ke perilaku hanya-baca (`userTokenReadOnly: true`).
Perilaku snapshot status:
@ -598,19 +598,19 @@ Perilaku snapshot status:
- Status adalah `available`, `configured_unavailable`, atau `missing`.
- `configured_unavailable` berarti akun dikonfigurasi melalui SecretRef
atau sumber secret non-inline lainnya, tetapi jalur perintah/runtime saat ini
tidak dapat me-resolve nilai aktualnya.
tidak dapat menyelesaikan nilai aktual.
- Dalam mode HTTP, `signingSecretStatus` disertakan; dalam Socket Mode,
pasangan yang wajib adalah `botTokenStatus` + `appTokenStatus`.
pasangan yang diperlukan adalah `botTokenStatus` + `appTokenStatus`.
<Tip>
Untuk pembacaan actions/direktori, user token dapat diprioritaskan saat dikonfigurasi. Untuk penulisan, bot token tetap diprioritaskan; penulisan dengan user-token hanya diizinkan ketika `userTokenReadOnly: false` dan bot token tidak tersedia.
Untuk tindakan/pembacaan direktori, user token dapat diprioritaskan saat dikonfigurasi. Untuk penulisan, bot token tetap diprioritaskan; penulisan dengan user token hanya diizinkan saat `userTokenReadOnly: false` dan bot token tidak tersedia.
</Tip>
## Actions dan gate
## Tindakan dan gate
Action Slack dikendalikan oleh `channels.slack.actions.*`.
Tindakan Slack dikendalikan oleh `channels.slack.actions.*`.
Grup action yang tersedia di tooling Slack saat ini:
Grup tindakan yang tersedia dalam tooling Slack saat ini:
| Group | Default |
| ---------- | ------- |
@ -620,7 +620,7 @@ Grup action yang tersedia di tooling Slack saat ini:
| memberInfo | enabled |
| emojiList | enabled |
Action pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`.
Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`.
## Kontrol akses dan routing
@ -636,15 +636,15 @@ Action pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `re
Flag DM:
- `dm.enabled` (default true)
- `channels.slack.allowFrom` (disarankan)
- `channels.slack.allowFrom` (lebih disukai)
- `dm.allowFrom` (legacy)
- `dm.groupEnabled` (default group DM false)
- `dm.groupEnabled` (default DM grup false)
- `dm.groupChannels` (allowlist MPIM opsional)
Prioritas multi-akun:
- `channels.slack.accounts.default.allowFrom` hanya berlaku untuk akun `default`.
- Akun bernama mewarisi `channels.slack.allowFrom` saat `allowFrom` milik mereka sendiri tidak diatur.
- Akun bernama mewarisi `channels.slack.allowFrom` ketika `allowFrom` milik mereka sendiri tidak disetel.
- Akun bernama tidak mewarisi `channels.slack.accounts.default.allowFrom`.
Pairing di DM menggunakan `openclaw pairing approve slack <code>`.
@ -658,15 +658,15 @@ Action pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `re
- `allowlist`
- `disabled`
Allowlist channel berada di bawah `channels.slack.channels` dan sebaiknya menggunakan ID channel yang stabil.
Allowlist channel berada di bawah `channels.slack.channels` dan harus menggunakan ID channel yang stabil.
Catatan runtime: jika `channels.slack` sama sekali tidak ada (penyiapan hanya-env), runtime akan fallback ke `groupPolicy="allowlist"` dan mencatat peringatan (bahkan jika `channels.defaults.groupPolicy` diatur).
Catatan runtime: jika `channels.slack` sepenuhnya tidak ada (penyiapan hanya-env), runtime fallback ke `groupPolicy="allowlist"` dan mencatat peringatan (bahkan jika `channels.defaults.groupPolicy` disetel).
Resolusi nama/ID:
- entri allowlist channel dan entri allowlist DM di-resolve saat startup ketika akses token mengizinkan
- entri nama channel yang tidak ter-resolve tetap disimpan sesuai konfigurasi tetapi secara default diabaikan untuk routing
- otorisasi inbound dan routing channel default-nya berbasis ID; pencocokan langsung username/slug memerlukan `channels.slack.dangerouslyAllowNameMatching: true`
- entri nama channel yang tidak ter-resolve tetap disimpan sebagaimana dikonfigurasi tetapi secara default diabaikan untuk routing
- otorisasi masuk dan routing channel secara default mengutamakan ID; pencocokan langsung nama pengguna/slug memerlukan `channels.slack.dangerouslyAllowNameMatching: true`
</Tab>
@ -677,9 +677,9 @@ Action pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `re
- mention aplikasi eksplisit (`<@botId>`)
- pola regex mention (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
- perilaku thread balas-ke-bot implisit (dinonaktifkan saat `thread.requireExplicitMention` adalah `true`)
- perilaku implisit thread balasan-ke-bot (dinonaktifkan saat `thread.requireExplicitMention` adalah `true`)
Kontrol per channel (`channels.slack.channels.<id>`; nama hanya melalui resolusi startup atau `dangerouslyAllowNameMatching`):
Kontrol per-channel (`channels.slack.channels.<id>`; nama hanya melalui resolusi startup atau `dangerouslyAllowNameMatching`):
- `requireMention`
- `users` (allowlist)
@ -687,8 +687,8 @@ Action pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `re
- `skills`
- `systemPrompt`
- `tools`, `toolsBySender`
- format kunci `toolsBySender`: `id:`, `e164:`, `username:`, `name:`, atau wildcard `"*"`
(kunci legacy tanpa prefix masih dipetakan hanya ke `id:`)
- format key `toolsBySender`: `id:`, `e164:`, `username:`, `name:`, atau wildcard `"*"`
(key legacy tanpa prefiks tetap dipetakan hanya ke `id:`)
</Tab>
</Tabs>
@ -700,37 +700,37 @@ Action pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `re
- Sesi channel: `agent:<agentId>:slack:channel:<channelId>`.
- Balasan thread dapat membuat sufiks sesi thread (`:thread:<threadTs>`) bila berlaku.
- Default `channels.slack.thread.historyScope` adalah `thread`; default `thread.inheritParent` adalah `false`.
- `channels.slack.thread.initialHistoryLimit` mengontrol berapa banyak pesan thread yang sudah ada diambil saat sesi thread baru dimulai (default `20`; setel `0` untuk menonaktifkan).
- `channels.slack.thread.requireExplicitMention` (default `false`): saat `true`, mention thread implisit disupresi sehingga bot hanya merespons mention `@bot` eksplisit di dalam thread, bahkan saat bot sudah berpartisipasi di thread tersebut. Tanpa ini, balasan di thread yang diikuti bot akan melewati gate `requireMention`.
- `channels.slack.thread.initialHistoryLimit` mengendalikan berapa banyak pesan thread yang sudah ada diambil saat sesi thread baru dimulai (default `20`; setel `0` untuk menonaktifkan).
- `channels.slack.thread.requireExplicitMention` (default `false`): saat `true`, mention thread implisit disupresi sehingga bot hanya merespons mention `@bot` eksplisit di dalam thread, bahkan ketika bot sudah berpartisipasi dalam thread tersebut. Tanpa ini, balasan dalam thread yang diikuti bot melewati gate `requireMention`.
Kontrol threading balasan:
- `channels.slack.replyToMode`: `off|first|all|batched` (default `off`)
- `channels.slack.replyToModeByChatType`: per `direct|group|channel`
- fallback legacy untuk chat direct: `channels.slack.dm.replyToMode`
- fallback legacy untuk chat langsung: `channels.slack.dm.replyToMode`
Tag balasan manual didukung:
- `[[reply_to_current]]`
- `[[reply_to:<id>]]`
Catatan: `replyToMode="off"` menonaktifkan **semua** threading balasan di Slack, termasuk tag `[[reply_to_*]]` eksplisit. Ini berbeda dari Telegram, di mana tag eksplisit tetap dihormati dalam mode `"off"`. Perbedaan ini mencerminkan model threading platform: thread Slack menyembunyikan pesan dari channel, sedangkan balasan Telegram tetap terlihat dalam alur chat utama.
Catatan: `replyToMode="off"` menonaktifkan **semua** threading balasan di Slack, termasuk tag `[[reply_to_*]]` eksplisit. Ini berbeda dari Telegram, yang masih menghormati tag eksplisit dalam mode `"off"`. Perbedaan ini mencerminkan model threading platform: thread Slack menyembunyikan pesan dari channel, sedangkan balasan Telegram tetap terlihat dalam alur chat utama.
## Reaksi ack
`ackReaction` mengirim emoji pengakuan saat OpenClaw sedang memproses pesan inbound.
`ackReaction` mengirim emoji pengakuan saat OpenClaw sedang memproses pesan masuk.
Urutan resolusi:
- `channels.slack.accounts.<accountId>.ackReaction`
- `channels.slack.ackReaction`
- `messages.ackReaction`
- fallback emoji identitas agent (`agents.list[].identity.emoji`, atau "👀")
- fallback emoji identitas agent (`agents.list[].identity.emoji`, jika tidak `"👀"`)
Catatan:
- Slack mengharapkan shortcode (misalnya `"eyes"`).
- Gunakan `""` untuk menonaktifkan reaksi pada akun Slack atau secara global.
- Gunakan `""` untuk menonaktifkan reaksi bagi akun Slack atau secara global.
## Streaming teks
@ -738,16 +738,17 @@ Catatan:
- `off`: nonaktifkan streaming pratinjau langsung.
- `partial` (default): ganti teks pratinjau dengan output parsial terbaru.
- `block`: tambahkan pembaruan pratinjau bertahap.
- `block`: tambahkan pembaruan pratinjau yang dipotong per chunk.
- `progress`: tampilkan teks status progres saat menghasilkan, lalu kirim teks final.
- `streaming.preview.toolProgress`: saat pratinjau draf aktif, rutekan pembaruan tool/progres ke pesan pratinjau hasil edit yang sama (default: `true`). Setel `false` untuk mempertahankan pesan tool/progres terpisah.
`channels.slack.streaming.nativeTransport` mengendalikan streaming teks native Slack saat `channels.slack.streaming.mode` adalah `partial` (default: `true`).
- Thread balasan harus tersedia agar streaming teks native dan status thread assistant Slack dapat muncul. Pemilihan thread tetap mengikuti `replyToMode`.
- Root channel dan group chat tetap dapat menggunakan pratinjau draf normal saat streaming native tidak tersedia.
- DM Slack level atas tetap di luar thread secara default, sehingga tidak menampilkan pratinjau bergaya thread; gunakan balasan thread atau `typingReaction` jika Anda ingin progres terlihat di sana.
- Payload media dan non-teks akan fallback ke pengiriman normal.
- Jika streaming gagal di tengah balasan, OpenClaw akan fallback ke pengiriman normal untuk payload yang tersisa.
- Root channel dan chat grup tetap dapat menggunakan pratinjau draf normal saat streaming native tidak tersedia.
- DM Slack tingkat atas secara default tetap di luar thread, sehingga tidak menampilkan pratinjau bergaya thread; gunakan balasan thread atau `typingReaction` jika Anda ingin progres terlihat di sana.
- Payload media dan non-teks fallback ke pengiriman normal.
- Jika streaming gagal di tengah balasan, OpenClaw fallback ke pengiriman normal untuk payload yang tersisa.
Gunakan pratinjau draf alih-alih streaming teks native Slack:
@ -764,15 +765,15 @@ Gunakan pratinjau draf alih-alih streaming teks native Slack:
}
```
Kunci legacy:
Key legacy:
- `channels.slack.streamMode` (`replace | status_final | append`) dimigrasikan otomatis ke `channels.slack.streaming.mode`.
- boolean `channels.slack.streaming` dimigrasikan otomatis ke `channels.slack.streaming.mode` dan `channels.slack.streaming.nativeTransport`.
- `channels.slack.nativeStreaming` legacy dimigrasikan otomatis ke `channels.slack.streaming.nativeTransport`.
## Fallback typing reaction
## Fallback reaksi mengetik
`typingReaction` menambahkan reaksi sementara ke pesan Slack inbound saat OpenClaw memproses balasan, lalu menghapusnya saat run selesai. Ini paling berguna di luar balasan thread, yang menggunakan indikator status default "is typing...".
`typingReaction` menambahkan reaksi sementara ke pesan Slack masuk saat OpenClaw sedang memproses balasan, lalu menghapusnya saat run selesai. Ini paling berguna di luar balasan thread, yang menggunakan indikator status default "is typing...".
Urutan resolusi:
@ -782,23 +783,23 @@ Urutan resolusi:
Catatan:
- Slack mengharapkan shortcode (misalnya `"hourglass_flowing_sand"`).
- Reaksi ini bersifat best-effort dan pembersihan dicoba secara otomatis setelah balasan atau jalur kegagalan selesai.
- Reaksi ini bersifat best-effort dan pembersihan dicoba secara otomatis setelah jalur balasan atau kegagalan selesai.
## Media, chunking, dan pengiriman
<AccordionGroup>
<Accordion title="Lampiran inbound">
Lampiran file Slack diunduh dari URL privat yang di-host Slack (alur permintaan yang diautentikasi token) dan ditulis ke media store saat pengambilan berhasil dan batas ukuran mengizinkan.
<Accordion title="Lampiran masuk">
Lampiran file Slack diunduh dari URL privat yang di-host Slack (alur permintaan terautentikasi token) dan ditulis ke penyimpanan media saat pengambilan berhasil dan batas ukuran mengizinkan.
Batas ukuran inbound runtime default adalah `20MB` kecuali dioverride oleh `channels.slack.mediaMaxMb`.
Batas ukuran masuk runtime default adalah `20MB` kecuali dioverride oleh `channels.slack.mediaMaxMb`.
</Accordion>
<Accordion title="Teks dan file outbound">
<Accordion title="Teks dan file keluar">
- chunk teks menggunakan `channels.slack.textChunkLimit` (default 4000)
- `channels.slack.chunkMode="newline"` mengaktifkan pemisahan yang mengutamakan paragraf
- pengiriman file menggunakan API upload Slack dan dapat menyertakan balasan thread (`thread_ts`)
- batas media outbound mengikuti `channels.slack.mediaMaxMb` saat dikonfigurasi; jika tidak, pengiriman channel menggunakan default jenis MIME dari pipeline media
- batas media keluar mengikuti `channels.slack.mediaMaxMb` saat dikonfigurasi; jika tidak, pengiriman channel menggunakan default jenis MIME dari pipeline media
</Accordion>
<Accordion title="Target pengiriman">
@ -814,7 +815,7 @@ Catatan:
## Perintah dan perilaku slash
Slash command muncul di Slack sebagai satu perintah terkonfigurasi atau beberapa perintah native. Konfigurasikan `channels.slack.slashCommand` untuk mengubah default perintah:
Slash command muncul di Slack sebagai satu perintah yang dikonfigurasi atau beberapa perintah native. Konfigurasikan `channels.slack.slashCommand` untuk mengubah default perintah:
- `enabled: false`
- `name: "openclaw"`
@ -825,7 +826,7 @@ Slash command muncul di Slack sebagai satu perintah terkonfigurasi atau beberapa
/openclaw /help
```
Perintah native memerlukan [pengaturan manifest tambahan](#additional-manifest-settings) di aplikasi Slack Anda dan diaktifkan dengan `channels.slack.commands.native: true` atau `commands.native: true` dalam konfigurasi global.
Perintah native memerlukan [pengaturan manifest tambahan](#additional-manifest-settings) di aplikasi Slack Anda dan diaktifkan dengan `channels.slack.commands.native: true` atau `commands.native: true` dalam konfigurasi global sebagai gantinya.
- Mode otomatis perintah native adalah **off** untuk Slack sehingga `commands.native: "auto"` tidak mengaktifkan perintah native Slack.
@ -837,18 +838,18 @@ Menu argumen native menggunakan strategi rendering adaptif yang menampilkan moda
- hingga 5 opsi: blok tombol
- 6-100 opsi: menu pilih statis
- lebih dari 100 opsi: external select dengan pemfilteran opsi async saat handler opsi interactivity tersedia
- lebih dari 100 opsi: pilihan eksternal dengan pemfilteran opsi async saat handler opsi interaktivitas tersedia
- melebihi batas Slack: nilai opsi yang dienkode fallback ke tombol
```txt
/think
```
Sesi slash menggunakan kunci terisolasi seperti `agent:<agentId>:slack:slash:<userId>` dan tetap merutekan eksekusi perintah ke sesi percakapan target menggunakan `CommandTargetSessionKey`.
Sesi slash menggunakan key terisolasi seperti `agent:<agentId>:slack:slash:<userId>` dan tetap merutekan eksekusi perintah ke sesi percakapan target menggunakan `CommandTargetSessionKey`.
## Balasan interaktif
Slack dapat merender kontrol balasan interaktif yang ditulis agent, tetapi fitur ini dinonaktifkan secara default.
Slack dapat merender kontrol balasan interaktif yang dibuat agent, tetapi fitur ini dinonaktifkan secara default.
Aktifkan secara global:
@ -882,7 +883,7 @@ Atau aktifkan hanya untuk satu akun Slack:
}
```
Saat diaktifkan, agent dapat mengeluarkan direktif balasan khusus Slack:
Saat diaktifkan, agent dapat menghasilkan direktif balasan khusus Slack:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
@ -892,30 +893,30 @@ Direktif ini dikompilasi menjadi Slack Block Kit dan merutekan klik atau pilihan
Catatan:
- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan direktif Slack Block Kit ke sistem tombol mereka sendiri.
- Nilai callback interaktif adalah token opaque yang dihasilkan OpenClaw, bukan nilai mentah yang ditulis agent.
- Jika blok interaktif yang dihasilkan akan melebihi batas Slack Block Kit, OpenClaw akan fallback ke balasan teks asli alih-alih mengirim payload blocks yang tidak valid.
- Nilai callback interaktif adalah token buram yang dihasilkan OpenClaw, bukan nilai mentah yang dibuat agent.
- Jika blok interaktif yang dihasilkan akan melebihi batas Slack Block Kit, OpenClaw fallback ke balasan teks asli alih-alih mengirim payload blocks yang tidak valid.
## Persetujuan exec di Slack
Slack dapat bertindak sebagai klien persetujuan native dengan tombol interaktif dan interaksi, alih-alih fallback ke Web UI atau terminal.
Slack dapat bertindak sebagai klien persetujuan native dengan tombol dan interaksi interaktif, alih-alih fallback ke UI Web atau terminal.
- Persetujuan exec menggunakan `channels.slack.execApprovals.*` untuk routing DM/channel native.
- Persetujuan Plugin tetap dapat di-resolve melalui permukaan tombol native Slack yang sama saat permintaan sudah masuk ke Slack dan jenis id persetujuannya adalah `plugin:`.
- Otorisasi approver tetap ditegakkan: hanya pengguna yang diidentifikasi sebagai approver yang dapat menyetujui atau menolak permintaan melalui Slack.
- Persetujuan Plugin masih dapat di-resolve melalui permukaan tombol native Slack yang sama saat permintaan sudah masuk ke Slack dan jenis id persetujuannya adalah `plugin:`.
- Otorisasi approver tetap diterapkan: hanya pengguna yang diidentifikasi sebagai approver yang dapat menyetujui atau menolak permintaan melalui Slack.
Ini menggunakan permukaan tombol persetujuan bersama yang sama seperti channel lain. Saat `interactivity` diaktifkan di pengaturan aplikasi Slack Anda, prompt persetujuan dirender sebagai tombol Block Kit langsung di percakapan.
Saat tombol-tombol tersebut ada, tombol itu menjadi UX persetujuan utama; OpenClaw
hanya boleh menyertakan perintah `/approve` manual saat hasil tool mengatakan persetujuan chat
Ini menggunakan permukaan tombol persetujuan bersama yang sama seperti channel lainnya. Saat `interactivity` diaktifkan di pengaturan aplikasi Slack Anda, prompt persetujuan dirender sebagai tombol Block Kit langsung di percakapan.
Saat tombol tersebut ada, itu menjadi UX persetujuan utama; OpenClaw
hanya boleh menyertakan perintah `/approve` manual ketika hasil tool mengatakan persetujuan chat
tidak tersedia atau persetujuan manual adalah satu-satunya jalur.
Path config:
Jalur config:
- `channels.slack.execApprovals.enabled`
- `channels.slack.execApprovals.approvers` (opsional; fallback ke `commands.ownerAllowFrom` bila memungkinkan)
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`)
- `agentFilter`, `sessionFilter`
Slack mengaktifkan otomatis persetujuan exec native saat `enabled` tidak diatur atau `"auto"` dan setidaknya satu
Slack otomatis mengaktifkan persetujuan exec native saat `enabled` tidak disetel atau `"auto"` dan setidaknya satu
approver berhasil di-resolve. Setel `enabled: false` untuk menonaktifkan Slack secara eksplisit sebagai klien persetujuan native.
Setel `enabled: true` untuk memaksa persetujuan native aktif saat approver berhasil di-resolve.
@ -929,7 +930,7 @@ Perilaku default tanpa config persetujuan exec Slack eksplisit:
}
```
Config native Slack eksplisit hanya diperlukan saat Anda ingin mengesampingkan approver, menambahkan filter, atau
Config native Slack eksplisit hanya diperlukan saat Anda ingin mengoverride approver, menambahkan filter, atau
memilih pengiriman origin-chat:
```json5
@ -946,24 +947,24 @@ memilih pengiriman origin-chat:
}
```
Penerusan bersama `approvals.exec` bersifat terpisah. Gunakan hanya saat prompt persetujuan exec juga harus
Penerusan bersama `approvals.exec` bersifat terpisah. Gunakan ini hanya ketika prompt persetujuan exec juga harus
dirutekan ke chat lain atau target out-of-band eksplisit. Penerusan bersama `approvals.plugin` juga
terpisah; tombol native Slack tetap dapat me-resolve persetujuan plugin saat permintaan tersebut sudah masuk
terpisah; tombol native Slack masih dapat me-resolve persetujuan plugin ketika permintaan tersebut sudah masuk
ke Slack.
`/approve` dalam chat yang sama juga berfungsi di channel dan DM Slack yang sudah mendukung perintah. Lihat [Persetujuan exec](/id/tools/exec-approvals) untuk model penerusan persetujuan lengkap.
`/approve` di chat yang sama juga berfungsi di channel dan DM Slack yang sudah mendukung perintah. Lihat [Persetujuan exec](/id/tools/exec-approvals) untuk model penerusan persetujuan lengkap.
## Event dan perilaku operasional
- Edit/hapus pesan/thread broadcast dipetakan menjadi event sistem.
- Event tambah/hapus reaksi dipetakan menjadi event sistem.
- Event anggota masuk/keluar, channel dibuat/diubah namanya, dan pin ditambah/dihapus dipetakan menjadi event sistem.
- `channel_id_changed` dapat memigrasikan kunci config channel saat `configWrites` diaktifkan.
- Metadata topik/tujuan channel diperlakukan sebagai konteks tidak tepercaya dan dapat diinjeksi ke konteks routing.
- Edit/hapus pesan/siaran thread dipetakan ke event sistem.
- Event tambah/hapus reaksi dipetakan ke event sistem.
- Event anggota bergabung/keluar, channel dibuat/diubah namanya, dan tambah/hapus pin dipetakan ke event sistem.
- `channel_id_changed` dapat memigrasikan key config channel saat `configWrites` diaktifkan.
- Metadata topik/tujuan channel diperlakukan sebagai konteks tak tepercaya dan dapat diinjeksi ke konteks routing.
- Starter thread dan penyemaian konteks riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku.
- Block action dan interaksi modal mengeluarkan event sistem terstruktur `Slack interaction: ...` dengan field payload kaya:
- block action: nilai yang dipilih, label, nilai picker, dan metadata `workflow_*`
- event modal `view_submission` dan `view_closed` dengan metadata channel yang dirutekan dan input formulir
- Tindakan blok dan interaksi modal menghasilkan event sistem terstruktur `Slack interaction: ...` dengan field payload kaya:
- tindakan blok: nilai yang dipilih, label, nilai picker, dan metadata `workflow_*`
- event modal `view_submission` dan `view_closed` dengan metadata channel terarah dan input formulir
## Pointer referensi konfigurasi
@ -977,7 +978,7 @@ Referensi utama:
- toggle kompatibilitas: `dangerouslyAllowNameMatching` (break-glass; biarkan nonaktif kecuali diperlukan)
- akses channel: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- threading/riwayat: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- pengiriman: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`
- pengiriman: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
- operasi/fitur: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
## Pemecahan masalah
@ -989,7 +990,7 @@ Referensi utama:
- `groupPolicy`
- allowlist channel (`channels.slack.channels`)
- `requireMention`
- allowlist `users` per channel
- allowlist `users` per-channel
Perintah yang berguna:
@ -1014,13 +1015,13 @@ openclaw pairing list slack
</Accordion>
<Accordion title="Socket mode tidak terhubung">
Validasi token bot + app dan aktivasi Socket Mode di pengaturan aplikasi Slack.
<Accordion title="Mode socket tidak terhubung">
Validasi token bot + app dan pengaktifan Socket Mode di pengaturan aplikasi Slack.
Jika `openclaw channels status --probe --json` menampilkan `botTokenStatus` atau
`appTokenStatus: "configured_unavailable"`, akun Slack tersebut
dikonfigurasi tetapi runtime saat ini tidak dapat me-resolve nilai yang
didukung SecretRef.
telah dikonfigurasi tetapi runtime saat ini tidak dapat me-resolve nilai
yang didukung SecretRef.
</Accordion>
@ -1028,20 +1029,20 @@ openclaw pairing list slack
Validasi:
- signing secret
- path webhook
- jalur webhook
- URL Permintaan Slack (Events + Interactivity + Slash Commands)
- `webhookPath` unik per akun HTTP
Jika `signingSecretStatus: "configured_unavailable"` muncul dalam snapshot
akun, akun HTTP tersebut dikonfigurasi tetapi runtime saat ini tidak dapat
akun, akun HTTP tersebut telah dikonfigurasi tetapi runtime saat ini tidak dapat
me-resolve signing secret yang didukung SecretRef.
</Accordion>
<Accordion title="Perintah native/slash tidak berjalan">
Verifikasi apakah yang Anda maksud:
Verifikasi apakah yang Anda maksud adalah:
- mode perintah native (`channels.slack.commands.native: true`) dengan slash command yang cocok terdaftar di Slack
- mode perintah native (`channels.slack.commands.native: true`) dengan slash command yang sesuai terdaftar di Slack
- atau mode satu slash command (`channels.slack.slashCommand.enabled: true`)
Periksa juga `commands.useAccessGroups` dan allowlist channel/pengguna.
@ -1052,9 +1053,9 @@ openclaw pairing list slack
## Terkait
- [Pairing](/id/channels/pairing)
- [Groups](/id/channels/groups)
- [Grup](/id/channels/groups)
- [Keamanan](/id/gateway/security)
- [Perutean channel](/id/channels/channel-routing)
- [Routing channel](/id/channels/channel-routing)
- [Pemecahan masalah](/id/channels/troubleshooting)
- [Konfigurasi](/id/gateway/configuration)
- [Slash commands](/id/tools/slash-commands)

View File

@ -4,24 +4,24 @@ read_when:
summary: Status dukungan, kemampuan, dan konfigurasi bot Telegram
title: Telegram
x-i18n:
generated_at: "2026-04-21T09:15:58Z"
generated_at: "2026-04-21T17:45:37Z"
model: gpt-5.4
provider: openai
source_hash: b5c70775b55d4923a31ad8bae7f4c6e7cbae754c05c3a578180d63db2b59e39a
source_hash: 816238b53942b319a300843db62ec1d4bf8d84bc11094010926ac9ad457c6d3d
source_path: channels/telegram.md
workflow: 15
---
# Telegram (Bot API)
Status: siap produksi untuk DM bot + grup melalui grammY. Long polling adalah mode default; mode webhook bersifat opsional.
Status: siap produksi untuk DM bot + grup melalui grammY. Long polling adalah mode default; mode Webhook bersifat opsional.
<CardGroup cols={3}>
<Card title="Pemasangan" icon="link" href="/id/channels/pairing">
<Card title="Pairing" icon="link" href="/id/channels/pairing">
Kebijakan DM default untuk Telegram adalah pairing.
</Card>
<Card title="Pemecahan masalah channel" icon="wrench" href="/id/channels/troubleshooting">
Diagnostik lintas-channel dan playbook perbaikan.
Diagnostik lintas channel dan panduan perbaikan.
</Card>
<Card title="Konfigurasi Gateway" icon="settings" href="/id/gateway/configuration">
Pola dan contoh konfigurasi channel lengkap.
@ -76,7 +76,7 @@ openclaw pairing approve telegram <CODE>
</Steps>
<Note>
Urutan resolusi token sadar-akun. Dalam praktiknya, nilai config mengalahkan fallback env, dan `TELEGRAM_BOT_TOKEN` hanya berlaku untuk akun default.
Urutan resolusi token memperhatikan akun. Dalam praktiknya, nilai config lebih diutamakan daripada fallback env, dan `TELEGRAM_BOT_TOKEN` hanya berlaku untuk akun default.
</Note>
## Pengaturan sisi Telegram
@ -90,12 +90,12 @@ Urutan resolusi token sadar-akun. Dalam praktiknya, nilai config mengalahkan fal
- nonaktifkan mode privasi melalui `/setprivacy`, atau
- jadikan bot admin grup.
Saat mengubah mode privasi, keluarkan lalu tambahkan kembali bot di setiap grup agar Telegram menerapkan perubahan tersebut.
Saat mengubah mode privasi, hapus + tambahkan kembali bot di setiap grup agar Telegram menerapkan perubahan tersebut.
</Accordion>
<Accordion title="Izin grup">
Status admin dikendalikan di pengaturan grup Telegram.
Status admin dikontrol di pengaturan grup Telegram.
Bot admin menerima semua pesan grup, yang berguna untuk perilaku grup yang selalu aktif.
@ -113,22 +113,22 @@ Urutan resolusi token sadar-akun. Dalam praktiknya, nilai config mengalahkan fal
<Tabs>
<Tab title="Kebijakan DM">
`channels.telegram.dmPolicy` mengontrol akses direct message:
`channels.telegram.dmPolicy` mengontrol akses pesan langsung:
- `pairing` (default)
- `allowlist` (memerlukan setidaknya satu ID pengirim di `allowFrom`)
- `open` (memerlukan `allowFrom` menyertakan `"*"`)
- `open` (mengharuskan `allowFrom` menyertakan `"*"`)
- `disabled`
`channels.telegram.allowFrom` menerima ID pengguna Telegram numerik. Prefix `telegram:` / `tg:` diterima dan dinormalisasi.
`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.
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 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).
Untuk bot dengan satu pemilik, pilih `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".
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 DM maupun perintah grup sama-sama berfungsi", masukkan ID pengguna Telegram numerik Anda ke `channels.telegram.allowFrom`.
@ -154,25 +154,25 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Dua kontrol diterapkan bersama:
1. **Grup mana yang diizinkan** (`channels.telegram.groups`)
- tidak ada config `groups`:
- dengan `groupPolicy: "open"`: grup apa pun dapat lolos pemeriksaan group-ID
- tanpa config `groups`:
- dengan `groupPolicy: "open"`: grup mana pun dapat lolos pemeriksaan group-ID
- dengan `groupPolicy: "allowlist"` (default): grup diblokir sampai Anda menambahkan entri `groups` (atau `"*"`)
- `groups` dikonfigurasi: bertindak sebagai allowlist (ID eksplisit atau `"*"`)
2. **Pengirim mana yang diizinkan di grup** (`channels.telegram.groupPolicy`)
2. **Pengirim mana yang diizinkan dalam grup** (`channels.telegram.groupPolicy`)
- `open`
- `allowlist` (default)
- `disabled`
`groupAllowFrom` digunakan untuk pemfilteran pengirim grup. Jika tidak diatur, Telegram akan fallback ke `allowFrom`.
Entri `groupAllowFrom` harus berupa ID pengguna Telegram numerik (prefix `telegram:` / `tg:` dinormalisasi).
Jangan masukkan chat ID grup atau supergroup Telegram ke `groupAllowFrom`. Chat ID negatif harus ditempatkan di bawah `channels.telegram.groups`.
`groupAllowFrom` digunakan untuk penyaringan pengirim grup. Jika tidak diatur, Telegram menggunakan fallback ke `allowFrom`.
Entri `groupAllowFrom` harus berupa ID pengguna Telegram numerik (prefiks `telegram:` / `tg:` dinormalisasi).
Jangan masukkan ID chat grup atau supergrup Telegram ke `groupAllowFrom`. ID chat negatif harus ditempatkan di bawah `channels.telegram.groups`.
Entri non-numerik diabaikan untuk otorisasi pengirim.
Batas keamanan (`2026.2.25+`): auth pengirim grup **tidak** mewarisi persetujuan pairing-store DM.
Pairing tetap hanya untuk DM. Untuk grup, atur `groupAllowFrom` atau `allowFrom` per-grup/per-topik.
Jika `groupAllowFrom` tidak diatur, Telegram fallback ke config `allowFrom`, bukan pairing store.
Jika `groupAllowFrom` tidak diatur, Telegram menggunakan fallback ke config `allowFrom`, bukan pairing store.
Pola praktis untuk bot dengan satu pemilik: atur ID pengguna Anda di `channels.telegram.allowFrom`, biarkan `groupAllowFrom` tidak diatur, dan izinkan grup target di bawah `channels.telegram.groups`.
Catatan runtime: jika `channels.telegram` benar-benar tidak ada, default runtime adalah fail-closed `groupPolicy="allowlist"` kecuali `channels.defaults.groupPolicy` diatur secara eksplisit.
Catatan runtime: jika `channels.telegram` sama sekali tidak ada, default runtime adalah fail-closed `groupPolicy="allowlist"` kecuali `channels.defaults.groupPolicy` diatur secara eksplisit.
Contoh: izinkan anggota mana pun di satu grup tertentu:
@ -211,15 +211,15 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
<Warning>
Kesalahan umum: `groupAllowFrom` bukan allowlist grup Telegram.
- Tempatkan chat ID grup atau supergroup Telegram negatif seperti `-1001234567890` di bawah `channels.telegram.groups`.
- Tempatkan ID pengguna Telegram seperti `8734062810` di bawah `groupAllowFrom` saat Anda ingin membatasi orang mana di dalam grup yang diizinkan yang dapat memicu bot.
- Gunakan `groupAllowFrom: ["*"]` hanya saat Anda ingin anggota mana pun dari grup yang diizinkan dapat berbicara dengan bot.
- Masukkan ID grup atau supergrup Telegram negatif seperti `-1001234567890` ke bawah `channels.telegram.groups`.
- Masukkan ID pengguna Telegram seperti `8734062810` ke bawah `groupAllowFrom` ketika Anda ingin membatasi siapa saja di dalam grup yang diizinkan yang dapat memicu bot.
- Gunakan `groupAllowFrom: ["*"]` hanya ketika Anda ingin anggota mana pun dari grup yang diizinkan bisa berbicara dengan bot.
</Warning>
</Tab>
<Tab title="Perilaku mention">
Balasan grup secara default memerlukan mention.
Balasan grup memerlukan mention secara default.
Mention dapat berasal dari:
@ -228,7 +228,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `agents.list[].groupChat.mentionPatterns`
- `messages.groupChat.mentionPatterns`
Toggle perintah level sesi:
Toggle perintah tingkat sesi:
- `/activation always`
- `/activation mention`
@ -261,19 +261,19 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
## Perilaku runtime
- Telegram dimiliki oleh proses gateway.
- Routing bersifat deterministik: balasan masuk dari Telegram dikembalikan ke Telegram (model tidak memilih channel).
- Pesan masuk dinormalisasi ke shared channel envelope dengan metadata balasan dan placeholder media.
- Routing bersifat deterministik: balasan masuk Telegram dibalas kembali ke Telegram (model tidak memilih channel).
- Pesan masuk 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 thread ID untuk balasan.
- Long polling menggunakan grammY runner dengan pengurutan per-chat/per-thread. Sink concurrency runner keseluruhan menggunakan `agents.defaults.maxConcurrent`.
- Restart watchdog long-polling dipicu setelah 120 detik tanpa liveness `getUpdates` yang selesai secara default. Tingkatkan `channels.telegram.pollingStallThresholdMs` hanya jika deployment Anda masih melihat restart polling-stall palsu selama pekerjaan yang berjalan lama. Nilainya dalam milidetik dan diizinkan dari `30000` hingga `600000`; override per-akun didukung.
- Telegram Bot API tidak memiliki dukungan tanda-terima baca (`sendReadReceipts` tidak berlaku).
- Pesan DM dapat membawa `message_thread_id`; OpenClaw merutekannya dengan session key yang sadar-thread dan mempertahankan thread ID untuk balasan.
- Long polling menggunakan runner grammY dengan sequencing per-chat/per-thread. Sink concurrency runner secara keseluruhan menggunakan `agents.defaults.maxConcurrent`.
- Restart watchdog long-polling dipicu setelah 120 detik tanpa liveness `getUpdates` yang selesai secara default. Tingkatkan `channels.telegram.pollingStallThresholdMs` hanya jika deployment Anda masih mengalami restart polling-stall palsu selama pekerjaan yang berjalan lama. Nilainya dalam milidetik dan diizinkan dari `30000` hingga `600000`; override per-akun didukung.
- Telegram Bot API tidak memiliki dukungan read-receipt (`sendReadReceipts` tidak berlaku).
## Referensi fitur
<AccordionGroup>
<Accordion title="Pratinjau stream langsung (pengeditan pesan)">
OpenClaw dapat melakukan streaming balasan parsial secara real time:
<Accordion title="Pratinjau live stream (edit pesan)">
OpenClaw dapat melakukan stream balasan parsial secara real time:
- chat langsung: pesan pratinjau + `editMessageText`
- grup/topik: pesan pratinjau + `editMessageText`
@ -281,35 +281,36 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Persyaratan:
- `channels.telegram.streaming` adalah `off | partial | block | progress` (default: `partial`)
- `progress` dipetakan ke `partial` di Telegram (kompatibel dengan penamaan lintas-channel)
- nilai boolean `channels.telegram.streamMode` dan `streaming` lama dipetakan otomatis
- `progress` dipetakan ke `partial` di Telegram (kompatibel dengan penamaan lintas channel)
- `streaming.preview.toolProgress` mengontrol apakah pembaruan tool/progress menggunakan kembali pesan pratinjau yang sama yang diedit (default: `true`). Atur `false` untuk mempertahankan pesan tool/progress terpisah.
- `channels.telegram.streamMode` lama dan nilai boolean `streaming` dipetakan otomatis
Untuk balasan teks saja:
- 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)
- DM: OpenClaw mempertahankan pesan pratinjau yang sama dan melakukan edit akhir di tempat (tanpa pesan kedua)
- grup/topik: OpenClaw mempertahankan pesan pratinjau yang sama dan melakukan edit akhir di tempat (tanpa pesan kedua)
Untuk balasan kompleks (misalnya payload media), OpenClaw fallback ke pengiriman final normal lalu membersihkan pesan pratinjau.
Untuk balasan yang kompleks (misalnya payload media), OpenClaw menggunakan fallback ke pengiriman akhir normal lalu membersihkan pesan pratinjau.
Streaming pratinjau terpisah dari block streaming. Saat block streaming diaktifkan secara eksplisit untuk Telegram, OpenClaw melewati stream pratinjau agar tidak terjadi streaming ganda.
Streaming pratinjau terpisah dari block streaming. Saat block streaming diaktifkan secara eksplisit untuk Telegram, OpenClaw melewati stream pratinjau untuk menghindari streaming ganda.
Jika transport draft native tidak tersedia/ditolak, OpenClaw otomatis fallback ke `sendMessage` + `editMessageText`.
Jika transport draft native tidak tersedia/ditolak, OpenClaw otomatis menggunakan fallback ke `sendMessage` + `editMessageText`.
Stream reasoning khusus Telegram:
- `/reasoning stream` mengirim reasoning ke pratinjau langsung selama proses pembuatan
- jawaban final dikirim tanpa teks reasoning
- `/reasoning stream` mengirim reasoning ke pratinjau live selama pembuatan
- jawaban akhir dikirim tanpa teks reasoning
</Accordion>
<Accordion title="Pemformatan dan fallback HTML">
Teks keluar menggunakan Telegram `parse_mode: "HTML"`.
- Teks bergaya Markdown dirender menjadi HTML aman untuk Telegram.
- Teks bergaya Markdown dirender ke HTML yang aman untuk Telegram.
- HTML mentah dari model di-escape untuk mengurangi kegagalan parse Telegram.
- Jika Telegram menolak HTML yang sudah di-parse, OpenClaw mencoba ulang sebagai teks biasa.
- Jika Telegram menolak HTML yang sudah di-parse, OpenClaw mencoba lagi sebagai teks biasa.
Pratinjau tautan aktif secara default dan dapat dinonaktifkan dengan `channels.telegram.linkPreview: false`.
Pratinjau tautan diaktifkan secara default dan dapat dinonaktifkan dengan `channels.telegram.linkPreview: false`.
</Accordion>
@ -337,22 +338,22 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Aturan:
- nama dinormalisasi (hapus `/` di awal, huruf kecil)
- nama dinormalisasi (hapus `/` di depan, huruf kecil)
- pola valid: `a-z`, `0-9`, `_`, panjang `1..32`
- perintah kustom tidak dapat menimpa perintah native
- konflik/duplikat dilewati dan dicatat ke log
- konflik/duplikat dilewati dan dicatat di log
Catatan:
- perintah kustom hanyalah entri menu; mereka tidak otomatis mengimplementasikan perilaku
- perintah kustom hanyalah entri menu; perintah tersebut tidak otomatis mengimplementasikan perilaku
- perintah plugin/Skills tetap dapat berfungsi saat diketik meskipun tidak ditampilkan di menu Telegram
Jika perintah native dinonaktifkan, bawaan akan dihapus. Perintah kustom/plugin mungkin tetap didaftarkan jika dikonfigurasi.
Jika perintah native dinonaktifkan, perintah bawaan akan dihapus. Perintah kustom/plugin mungkin tetap terdaftar jika dikonfigurasi.
Kegagalan penyiapan umum:
Kegagalan penyiapan yang umum:
- `setMyCommands failed` dengan `BOT_COMMANDS_TOO_MUCH` berarti menu Telegram masih meluap setelah dipangkas; kurangi perintah plugin/Skills/kustom atau nonaktifkan `channels.telegram.commands.native`.
- `setMyCommands failed` dengan error jaringan/fetch biasanya berarti DNS/HTTPS keluar ke `api.telegram.org` diblokir.
- `setMyCommands failed` dengan `BOT_COMMANDS_TOO_MUCH` berarti menu Telegram masih kelebihan muatan setelah dipangkas; kurangi perintah plugin/Skills/kustom atau nonaktifkan `channels.telegram.commands.native`.
- `setMyCommands failed` dengan kesalahan network/fetch biasanya berarti DNS/HTTPS keluar ke `api.telegram.org` diblokir.
### Perintah pairing perangkat (plugin `device-pair`)
@ -363,12 +364,12 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
3. `/pair pending` menampilkan daftar permintaan yang tertunda (termasuk role/scopes)
4. setujui permintaan:
- `/pair approve <requestId>` untuk persetujuan eksplisit
- `/pair approve` saat hanya ada satu permintaan tertunda
- `/pair approve` saat hanya ada satu permintaan yang tertunda
- `/pair approve latest` untuk yang paling baru
Kode penyiapan membawa bootstrap token yang berlaku singkat. Built-in bootstrap handoff menjaga token node utama tetap di `scopes: []`; token operator yang diserahkan tetap dibatasi ke `operator.approvals`, `operator.read`, `operator.talk.secrets`, dan `operator.write`. Pemeriksaan bootstrap scope berawalan role, sehingga allowlist operator tersebut hanya memenuhi permintaan operator; role non-operator tetap memerlukan scope di bawah prefix role mereka sendiri.
Kode penyiapan membawa token bootstrap berumur singkat. Handoff bootstrap bawaan menjaga token node utama tetap pada `scopes: []`; token operator yang diserahkan tetap dibatasi pada `operator.approvals`, `operator.read`, `operator.talk.secrets`, dan `operator.write`. Pemeriksaan scope bootstrap diawali prefiks role, sehingga allowlist operator itu hanya memenuhi permintaan operator; role non-operator tetap memerlukan scope di bawah prefiks role mereka sendiri.
Jika sebuah perangkat mencoba ulang dengan detail auth yang berubah (misalnya role/scopes/public key), permintaan tertunda sebelumnya akan digantikan dan permintaan baru akan menggunakan `requestId` yang berbeda. Jalankan ulang `/pair pending` sebelum menyetujui.
Jika perangkat mencoba lagi dengan detail auth yang berubah (misalnya role/scopes/public key), permintaan tertunda sebelumnya digantikan dan permintaan baru menggunakan `requestId` yang berbeda. Jalankan ulang `/pair pending` sebelum menyetujui.
Detail selengkapnya: [Pairing](/id/channels/pairing#pair-via-telegram-recommended-for-ios).
@ -435,12 +436,12 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Klik callback diteruskan ke agent sebagai teks:
Klik callback diteruskan ke agen sebagai teks:
`callback_data: <value>`
</Accordion>
<Accordion title="Aksi pesan Telegram untuk agent dan otomasi">
<Accordion title="Aksi pesan Telegram untuk agen dan otomasi">
Aksi tool Telegram meliputi:
- `sendMessage` (`to`, `content`, opsional `mediaUrl`, `replyToMessageId`, `messageThreadId`)
@ -456,10 +457,10 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `channels.telegram.actions.sendMessage`
- `channels.telegram.actions.deleteMessage`
- `channels.telegram.actions.reactions`
- `channels.telegram.actions.sticker` (default: dinonaktifkan)
- `channels.telegram.actions.sticker` (default: disabled)
Catatan: `edit` dan `topic-create` saat ini diaktifkan secara default dan tidak memiliki toggle `channels.telegram.actions.*` terpisah.
Pengiriman runtime menggunakan snapshot config/secrets yang aktif (startup/reload), sehingga jalur aksi tidak melakukan re-resolve SecretRef ad hoc untuk setiap pengiriman.
Pengiriman runtime menggunakan snapshot config/secrets yang aktif (startup/reload), sehingga jalur aksi tidak melakukan resolusi ulang SecretRef ad-hoc untuk setiap pengiriman.
Semantik penghapusan reaksi: [/tools/reactions](/id/tools/reactions)
@ -477,16 +478,16 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `first`
- `all`
Catatan: `off` menonaktifkan threading balasan implisit. Tag `[[reply_to_*]]` eksplisit tetap dihormati.
Catatan: `off` menonaktifkan threading balasan implisit. Tag `[[reply_to_*]]` yang eksplisit tetap dihormati.
</Accordion>
<Accordion title="Topik forum dan perilaku thread">
Supergroup forum:
Supergrup forum:
- kunci sesi topik menambahkan `:topic:<threadId>`
- session key topik menambahkan `:topic:<threadId>`
- balasan dan pengetikan menargetkan thread topik
- jalur config topik:
- path config topik:
`channels.telegram.groups.<chatId>.topics.<threadId>`
Kasus khusus topik umum (`threadId=1`):
@ -494,10 +495,10 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- pengiriman pesan menghilangkan `message_thread_id` (Telegram menolak `sendMessage(...thread_id=1)`)
- aksi mengetik tetap menyertakan `message_thread_id`
Pewarisan topik: entri topik mewarisi pengaturan grup kecuali dioverride (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` hanya untuk topik dan tidak mewarisi dari default grup.
Pewarisan topik: entri topik mewarisi pengaturan grup kecuali jika dioverride (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` hanya untuk topik dan tidak diwarisi 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:
**Routing agen per-topik**: Setiap topik dapat dirutekan ke agen berbeda dengan menetapkan `agentId` di config topik. Ini memberi setiap topik workspace, memori, dan sesi terisolasi sendiri. Contoh:
```json5
{
@ -506,9 +507,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
groups: {
"-1001234567890": {
topics: {
"1": { agentId: "main" }, // Topik umum → agent main
"3": { agentId: "zu" }, // Topik dev → agent zu
"5": { agentId: "coder" } // Tinjauan kode → agent coder
"1": { agentId: "main" }, // Topik umum → agen main
"3": { agentId: "zu" }, // Topik dev → agen zu
"5": { agentId: "coder" } // Code review → agen coder
}
}
}
@ -517,9 +518,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Setiap topik kemudian memiliki kunci sesinya sendiri: `agent:zu:telegram:group:-1001234567890:topic:3`
Setiap topik kemudian memiliki session key sendiri: `agent:zu:telegram:group:-1001234567890:topic:3`
**Binding topik ACP persisten**: Topik forum dapat menyematkan sesi harness ACP melalui binding ACP bertipe di level atas:
**Binding topik ACP persisten**: Topik forum dapat menyematkan sesi harness ACP melalui binding ACP bertipe tingkat atas:
- `bindings[]` dengan `type: "acp"` dan `match.channel: "telegram"`
@ -570,13 +571,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Ini saat ini dibatasi pada topik forum di grup dan supergroup.
Ini saat ini dibatasi pada topik forum di grup dan supergrup.
**Spawn ACP terikat thread dari chat**:
- `/acp spawn <agent> --thread here|auto` dapat 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 pengikatan berhasil.
- Pesan topik lanjutan dirutekan langsung ke sesi ACP yang terikat (tidak memerlukan `/acp steer`).
- OpenClaw menyematkan pesan konfirmasi spawn di dalam topik setelah bind berhasil.
- Memerlukan `channels.telegram.threadBindings.spawnAcpSessions=true`.
Konteks template mencakup:
@ -586,7 +587,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Perilaku thread DM:
- chat privat dengan `message_thread_id` tetap mempertahankan routing DM tetapi menggunakan kunci sesi/target balasan yang sadar-thread.
- chat privat dengan `message_thread_id` tetap menggunakan routing DM tetapi memakai session key/target balasan yang sadar-thread.
</Accordion>
@ -596,7 +597,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Telegram membedakan voice note dan file audio.
- default: perilaku file audio
- tag `[[audio_as_voice]]` dalam balasan agent untuk memaksa pengiriman sebagai voice note
- tag `[[audio_as_voice]]` dalam balasan agen untuk memaksa pengiriman sebagai voice note
Contoh aksi pesan:
@ -648,7 +649,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `~/.openclaw/telegram/sticker-cache.json`
Stiker dideskripsikan satu kali (jika memungkinkan) dan di-cache untuk mengurangi panggilan vision yang berulang.
Stiker dideskripsikan satu kali (bila memungkinkan) lalu di-cache untuk mengurangi panggilan vision berulang.
Aktifkan aksi stiker:
@ -689,11 +690,11 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Notifikasi reaksi">
Reaksi Telegram datang sebagai update `message_reaction` (terpisah dari payload pesan).
Reaksi Telegram datang sebagai pembaruan `message_reaction` (terpisah dari payload pesan).
Saat diaktifkan, OpenClaw memasukkan event sistem seperti:
Saat diaktifkan, OpenClaw mengantrikan event sistem seperti:
- `Reaksi Telegram ditambahkan: 👍 oleh Alice (@alice) pada pesan 42`
- `Reaksi Telegram ditambahkan: 👍 oleh Alice (@alice) pada msg 42`
Config:
@ -702,13 +703,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Catatan:
- `own` berarti reaksi pengguna hanya pada pesan yang dikirim bot (best-effort melalui cache pesan terkirim).
- Event reaksi tetap mematuhi kontrol akses Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); pengirim yang tidak diotorisasi akan dibuang.
- Telegram tidak menyediakan thread ID dalam update reaksi.
- `own` berarti hanya reaksi pengguna pada pesan yang dikirim bot (best-effort melalui cache pesan terkirim).
- Event reaksi tetap mematuhi kontrol akses Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); pengirim yang tidak berwenang akan dibuang.
- Telegram tidak menyediakan thread ID dalam pembaruan reaksi.
- 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`.
`allowed_updates` untuk polling/Webhook otomatis menyertakan `message_reaction`.
</Accordion>
@ -720,19 +721,19 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `channels.telegram.accounts.<accountId>.ackReaction`
- `channels.telegram.ackReaction`
- `messages.ackReaction`
- fallback emoji identitas agent (`agents.list[].identity.emoji`, atau "👀")
- fallback emoji identitas agen (`agents.list[].identity.emoji`, atau "👀")
Catatan:
- Telegram mengharapkan emoji unicode (misalnya "👀").
- Gunakan `""` untuk menonaktifkan reaksi bagi sebuah channel atau akun.
- Gunakan `""` untuk menonaktifkan reaksi pada channel atau akun.
</Accordion>
<Accordion title="Penulisan config dari event dan perintah Telegram">
Penulisan config channel diaktifkan secara default (`configWrites !== false`).
Penulisan yang dipicu Telegram mencakup:
Penulisan yang dipicu Telegram meliputi:
- event migrasi grup (`migrate_to_chat_id`) untuk memperbarui `channels.telegram.groups`
- `/config set` dan `/config unset` (memerlukan pengaktifan perintah)
@ -751,20 +752,20 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Long polling vs webhook">
<Accordion title="Long polling vs Webhook">
Default: long polling.
Mode webhook:
Mode Webhook:
- atur `channels.telegram.webhookUrl`
- atur `channels.telegram.webhookSecret` (wajib saat webhook URL diatur)
- atur `channels.telegram.webhookSecret` (wajib saat URL Webhook diatur)
- opsional `channels.telegram.webhookPath` (default `/telegram-webhook`)
- opsional `channels.telegram.webhookHost` (default `127.0.0.1`)
- opsional `channels.telegram.webhookPort` (default `8787`)
Listener lokal default untuk mode webhook melakukan bind ke `127.0.0.1:8787`.
Listener lokal default untuk mode Webhook bind ke `127.0.0.1:8787`.
Jika endpoint publik Anda berbeda, tempatkan reverse proxy di depan lalu arahkan `webhookUrl` ke URL publik.
Jika endpoint publik Anda berbeda, tempatkan reverse proxy di depannya dan arahkan `webhookUrl` ke URL publik.
Atur `webhookHost` (misalnya `0.0.0.0`) saat Anda memang membutuhkan ingress eksternal.
</Accordion>
@ -773,17 +774,17 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- default `channels.telegram.textChunkLimit` adalah 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.timeoutSeconds` mengoverride timeout klien Telegram API (jika tidak diatur, default grammY berlaku).
- default `channels.telegram.pollingStallThresholdMs` adalah `120000`; sesuaikan antara `30000` dan `600000` hanya untuk restart polling-stall false-positive.
- `channels.telegram.timeoutSeconds` menimpa timeout klien API Telegram (jika tidak diatur, default grammY berlaku).
- `channels.telegram.pollingStallThresholdMs` default ke `120000`; sesuaikan antara `30000` dan `600000` hanya untuk restart polling-stall false-positive.
- riwayat konteks grup menggunakan `channels.telegram.historyLimit` atau `messages.groupChat.historyLimit` (default 50); `0` menonaktifkan.
- konteks tambahan reply/quote/forward saat ini diteruskan sebagaimana diterima.
- allowlist Telegram terutama membatasi siapa yang dapat memicu agent, bukan batas redaksi konteks tambahan penuh.
- allowlist Telegram terutama membatasi siapa yang dapat memicu agen, bukan batas redaksi konteks tambahan yang sepenuhnya lengkap.
- kontrol riwayat DM:
- `channels.telegram.dmHistoryLimit`
- `channels.telegram.dms["<user_id>"].historyLimit`
- config `channels.telegram.retry` berlaku untuk helper pengiriman Telegram (CLI/tools/actions) pada error API keluar yang dapat dipulihkan.
- config `channels.telegram.retry` berlaku untuk helper pengiriman Telegram (CLI/tools/actions) pada kesalahan API keluar yang dapat dipulihkan.
Target kirim CLI dapat berupa chat ID numerik atau username:
Target pengiriman CLI dapat berupa chat ID numerik atau username:
```bash
openclaw message send --channel telegram --target 123456789 --message "hi"
@ -815,25 +816,25 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
Gating aksi:
- `channels.telegram.actions.sendMessage=false` menonaktifkan pesan Telegram keluar, termasuk poll
- `channels.telegram.actions.poll=false` menonaktifkan pembuatan poll Telegram sambil tetap mengaktifkan pengiriman biasa
- `channels.telegram.actions.poll=false` menonaktifkan pembuatan poll Telegram sambil tetap membiarkan pengiriman biasa aktif
</Accordion>
<Accordion title="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:
Path config:
- `channels.telegram.execApprovals.enabled`
- `channels.telegram.execApprovals.approvers` (opsional; fallback ke ID pemilik numerik yang diinferensikan dari `allowFrom` dan `defaultTo` direct message bila memungkinkan)
- `channels.telegram.execApprovals.approvers` (opsional; menggunakan fallback ke ID pemilik numerik yang diinferensikan dari `allowFrom` dan `defaultTo` langsung bila memungkinkan)
- `channels.telegram.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`)
- `agentFilter`, `sessionFilter`
Approver harus berupa ID pengguna Telegram numerik. Telegram otomatis mengaktifkan persetujuan exec native saat `enabled` tidak diatur atau `"auto"` dan setidaknya satu approver dapat di-resolve, 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 lain yang dikonfigurasi atau ke kebijakan fallback persetujuan exec.
Approver harus berupa ID pengguna Telegram numerik. Telegram secara otomatis mengaktifkan persetujuan exec native saat `enabled` tidak diatur atau `"auto"` dan setidaknya satu approver dapat di-resolve, baik dari `execApprovals.approvers` maupun dari config pemilik numerik akun (`allowFrom` dan `defaultTo` pesan langsung). Atur `enabled: false` untuk menonaktifkan Telegram sebagai klien persetujuan native secara eksplisit. Jika tidak, permintaan persetujuan akan menggunakan fallback ke rute persetujuan lain yang dikonfigurasi 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, itu adalah UX persetujuan utama; OpenClaw
hanya boleh menyertakan perintah manual `/approve` saat hasil tool mengatakan
Saat tombol tersebut ada, tombol itu menjadi UX persetujuan utama; OpenClaw
hanya boleh menyertakan perintah `/approve` manual ketika hasil tool menyatakan
persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur.
Aturan pengiriman:
@ -846,33 +847,33 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
Perilaku resolusi persetujuan:
- ID yang berawalan `plugin:` selalu di-resolve melalui persetujuan plugin.
- ID yang diawali `plugin:` selalu di-resolve melalui persetujuan plugin.
- ID persetujuan lain mencoba `exec.approval.resolve` terlebih dahulu.
- Jika Telegram juga diotorisasi untuk persetujuan plugin dan gateway mengatakan
persetujuan exec tidak dikenal/kedaluwarsa, Telegram mencoba ulang sekali melalui
- Jika Telegram juga diotorisasi untuk persetujuan plugin dan gateway menyatakan
persetujuan exec tidak dikenal/kedaluwarsa, Telegram mencoba lagi sekali melalui
`plugin.approval.resolve`.
- Penolakan/error persetujuan exec yang nyata tidak diam-diam fallback ke resolusi
persetujuan plugin.
- Penolakan/kesalahan persetujuan exec yang nyata tidak diam-diam diteruskan ke
resolusi persetujuan plugin.
Pengiriman channel menampilkan teks perintah di chat, jadi aktifkan `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.
Pengiriman channel menampilkan teks perintah di chat, jadi aktifkan `channel` atau `both` hanya di grup/topik tepercaya. Saat prompt tiba 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 exec](/id/tools/exec-approvals)
Dokumen terkait: [Persetujuan exec](/id/tools/exec-approvals)
</Accordion>
</AccordionGroup>
## Kontrol balasan error
## Kontrol balasan kesalahan
Saat agent mengalami error pengiriman atau provider, Telegram dapat membalas dengan teks error atau menekannya. Dua kunci config mengontrol perilaku ini:
Ketika agen mengalami kesalahan pengiriman atau provider, Telegram dapat membalas dengan teks kesalahan atau menekannya. Dua key config mengontrol perilaku ini:
| Key | Values | Default | Description |
| ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` mengirim pesan error yang ramah ke chat. `silent` menekan balasan error sepenuhnya. |
| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Waktu minimum antar balasan error ke chat yang sama. Mencegah spam error saat outage. |
| Key | Nilai | Default | Deskripsi |
| ----------------------------------- | ----------------- | ------- | -------------------------------------------------------------------------------------------- |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` mengirim pesan kesalahan yang ramah ke chat. `silent` sepenuhnya menekan balasan kesalahan. |
| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Waktu minimum antar balasan kesalahan ke chat yang sama. Mencegah spam kesalahan saat outage. |
Override per-akun, per-grup, dan per-topik didukung (pewarisan yang sama seperti kunci config Telegram lainnya).
Override per-akun, per-grup, dan per-topik didukung (pewarisan sama seperti key config Telegram lainnya).
```json5
{
@ -882,7 +883,7 @@ Override per-akun, per-grup, dan per-topik didukung (pewarisan yang sama seperti
errorCooldownMs: 120000,
groups: {
"-1001234567890": {
errorPolicy: "silent", // tekan error di grup ini
errorPolicy: "silent", // tekan kesalahan di grup ini
},
},
},
@ -897,9 +898,9 @@ Override per-akun, per-grup, dan per-topik didukung (pewarisan yang sama seperti
- Jika `requireMention=false`, mode privasi Telegram harus mengizinkan visibilitas penuh.
- BotFather: `/setprivacy` -> Disable
- lalu keluarkan + tambahkan kembali bot ke grup
- `openclaw channels status` memberi peringatan saat config mengharapkan pesan grup tanpa mention.
- `openclaw channels status --probe` dapat memeriksa group ID numerik eksplisit; wildcard `"*"` tidak dapat diperiksa keanggotaannya.
- lalu hapus + tambahkan kembali bot ke grup
- `openclaw channels status` memperingatkan saat config mengharapkan pesan grup tanpa mention.
- `openclaw channels status --probe` dapat memeriksa group ID numerik yang eksplisit; wildcard `"*"` tidak dapat diuji keanggotaannya.
- uji sesi cepat: `/activation always`.
</Accordion>
@ -912,23 +913,23 @@ Override per-akun, per-grup, dan per-topik didukung (pewarisan yang sama seperti
</Accordion>
<Accordion title="Perintah bekerja sebagian atau tidak bekerja sama sekali">
<Accordion title="Perintah berfungsi sebagian atau sama sekali tidak berfungsi">
- otorisasi identitas pengirim Anda (pairing dan/atau `allowFrom` numerik)
- otorisasi perintah tetap berlaku meskipun kebijakan grup adalah `open`
- otorisasi perintah tetap berlaku bahkan saat kebijakan grup adalah `open`
- `setMyCommands failed` dengan `BOT_COMMANDS_TOO_MUCH` berarti menu native memiliki terlalu banyak entri; kurangi perintah plugin/Skills/kustom atau nonaktifkan menu native
- `setMyCommands failed` dengan error jaringan/fetch biasanya menunjukkan masalah keterjangkauan DNS/HTTPS ke `api.telegram.org`
- `setMyCommands failed` dengan kesalahan network/fetch biasanya menandakan masalah jangkauan DNS/HTTPS ke `api.telegram.org`
</Accordion>
<Accordion title="Polling atau ketidakstabilan jaringan">
- Node 22+ + fetch/proxy kustom dapat memicu perilaku abort langsung jika tipe AbortSignal tidak cocok.
- Beberapa host me-resolve `api.telegram.org` ke IPv6 terlebih dahulu; egress IPv6 yang rusak dapat menyebabkan kegagalan Telegram API yang intermiten.
- Jika log menyertakan `TypeError: fetch failed` atau `Network request for 'getUpdates' failed!`, OpenClaw sekarang mencoba ulang ini sebagai error jaringan yang dapat dipulihkan.
- Beberapa host me-resolve `api.telegram.org` ke IPv6 lebih dulu; egress IPv6 yang rusak dapat menyebabkan kegagalan API Telegram yang intermiten.
- Jika log menyertakan `TypeError: fetch failed` atau `Network 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.pollingStallThresholdMs` hanya saat panggilan `getUpdates` yang berjalan lama sehat tetapi host Anda masih melaporkan restart polling-stall false-positive. Stall persisten biasanya menunjuk ke masalah proxy, DNS, IPv6, atau TLS egress antara host dan `api.telegram.org`.
- Pada host VPS dengan egress/TLS langsung yang tidak stabil, rutekan panggilan Telegram API melalui `channels.telegram.proxy`:
- Tingkatkan `channels.telegram.pollingStallThresholdMs` hanya saat panggilan `getUpdates` yang berjalan lama sehat tetapi host Anda masih melaporkan restart polling-stall palsu. Stall yang persisten biasanya menunjukkan masalah proxy, DNS, IPv6, atau egress TLS antara host dan `api.telegram.org`.
- Pada host VPS dengan egress/TLS langsung yang tidak stabil, rutekan panggilan API Telegram melalui `channels.telegram.proxy`:
```yaml
channels:
@ -937,7 +938,7 @@ channels:
```
- Default Node 22+ adalah `autoSelectFamily=true` (kecuali WSL2) dan `dnsResultOrder=ipv4first`.
- Jika host Anda adalah WSL2 atau memang bekerja lebih baik dengan perilaku khusus IPv4, paksa pemilihan family:
- Jika host Anda adalah WSL2 atau memang bekerja lebih baik dengan perilaku IPv4-only, paksa pemilihan family:
```yaml
channels:
@ -947,10 +948,10 @@ channels:
```
- 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 ulang `api.telegram.org` ke alamat
untuk unduhan media Telegram secara default. Jika fake-IP atau
proxy transparan tepercaya menulis ulang `api.telegram.org` ke alamat
private/internal/special-use lain selama unduhan media, Anda dapat memilih
bypass khusus Telegram ini:
bypass khusus Telegram berikut:
```yaml
channels:
@ -959,21 +960,21 @@ channels:
dangerouslyAllowPrivateNetwork: true
```
- Opt-in yang sama tersedia per akun di
- 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 mati terlebih dahulu. Media Telegram sudah mengizinkan rentang
benchmark RFC 2544 secara default.
flag berbahaya tetap nonaktif terlebih dahulu. Media Telegram sudah
mengizinkan rentang benchmark RFC 2544 secara default.
<Warning>
`channels.telegram.network.dangerouslyAllowPrivateNetwork` melemahkan perlindungan
SSRF media Telegram. Gunakan ini hanya untuk lingkungan proxy tepercaya yang dikendalikan operator
seperti routing fake-IP Clash, Mihomo, atau Surge saat mereka
mensintesis jawaban private atau special-use di luar rentang benchmark RFC 2544.
Biarkan tetap mati untuk akses Telegram internet publik normal.
`channels.telegram.network.dangerouslyAllowPrivateNetwork` melemahkan
perlindungan SSRF media Telegram. Gunakan ini hanya untuk lingkungan proxy
tepercaya yang dikendalikan operator seperti routing fake-IP Clash, Mihomo, atau Surge saat
mereka mensintesis jawaban private atau special-use di luar rentang benchmark
RFC 2544. Biarkan tetap nonaktif untuk akses Telegram internet publik normal.
</Warning>
- Override environment (sementara):
- Override env (sementara):
- `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first`
@ -987,7 +988,7 @@ dig +short api.telegram.org AAAA
</Accordion>
</AccordionGroup>
Bantuan lebih lanjut: [Pemecahan masalah channel](/id/channels/troubleshooting).
Bantuan selengkapnya: [Pemecahan masalah channel](/id/channels/troubleshooting).
## Pointer referensi config Telegram
@ -995,37 +996,37 @@ 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.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). `allowlist` memerlukan setidaknya satu ID pengirim. `open` memerlukan `"*"`. `openclaw doctor --fix` dapat menyelesaikan entri `@username` lama 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 memerlukan `sendMessage`).
- `channels.telegram.allowFrom`: allowlist DM (ID pengguna Telegram numerik). `allowlist` memerlukan setidaknya satu ID pengirim. `open` memerlukan `"*"`. `openclaw doctor --fix` dapat me-resolve entri `@username` lama 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: enabled; tetap memerlukan `sendMessage`).
- `channels.telegram.defaultTo`: target Telegram default yang digunakan oleh CLI `--deliver` saat tidak ada `--reply-to` eksplisit.
- `channels.telegram.groupPolicy`: `open | allowlist | disabled` (default: allowlist).
- `channels.telegram.groupAllowFrom`: allowlist pengirim grup (ID pengguna Telegram numerik). `openclaw doctor --fix` dapat menyelesaikan entri `@username` lama menjadi ID. Entri non-numerik diabaikan saat auth. Auth grup tidak menggunakan fallback pairing-store DM (`2026.2.25+`).
- `channels.telegram.groupAllowFrom`: allowlist pengirim grup (ID pengguna Telegram numerik). `openclaw doctor --fix` dapat me-resolve entri `@username` lama 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 account ID dikonfigurasi, atur `channels.telegram.defaultAccount` (atau sertakan `channels.telegram.accounts.default`) untuk membuat routing default eksplisit.
- Jika keduanya tidak diatur, OpenClaw fallback ke account ID pertama yang dinormalisasi dan `openclaw doctor` akan memberi peringatan.
- Saat dua atau lebih account ID dikonfigurasi, atur `channels.telegram.defaultAccount` (atau sertakan `channels.telegram.accounts.default`) agar routing default eksplisit.
- Jika tidak ada yang diatur, OpenClaw menggunakan fallback ke account ID pertama yang dinormalisasi dan `openclaw doctor` akan memperingatkan.
- `channels.telegram.accounts.default.allowFrom` dan `channels.telegram.accounts.default.groupAllowFrom` hanya berlaku untuk akun `default`.
- Akun bernama mewarisi `channels.telegram.allowFrom` dan `channels.telegram.groupAllowFrom` saat nilai level akun tidak diatur.
- Akun bernama mewarisi `channels.telegram.allowFrom` dan `channels.telegram.groupAllowFrom` saat nilai tingkat akun tidak diatur.
- Akun bernama tidak mewarisi `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`.
- `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 Skills (hilangkan = semua Skills, kosong = tidak ada).
- `channels.telegram.groups.<id>.skills`: filter Skills (tidak diisi = 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 saat `false`.
- `channels.telegram.groups.<id>.topics.<threadId>.*`: override per-topik (field grup + `agentId` khusus topik).
- `channels.telegram.groups.<id>.topics.<threadId>.agentId`: rutekan topik ini ke agent tertentu (mengoverride routing level grup dan binding).
- `channels.telegram.groups.<id>.topics.<threadId>.agentId`: rutekan topik ini ke agen 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[]` level atas dengan `type: "acp"` dan ID topik kanonis `chatId:topic:topicId` di `match.peer.id`: field binding topik ACP persisten (lihat [ACP Agents](/id/tools/acp-agents#channel-specific-settings)).
- `channels.telegram.direct.<id>.topics.<threadId>.agentId`: rutekan topik DM ke agent tertentu (perilaku sama seperti topik forum).
- `bindings[]` tingkat atas dengan `type: "acp"` dan ID topik kanonis `chatId:topic:topicId` di `match.peer.id`: field binding topik ACP persisten (lihat [ACP Agents](/id/tools/acp-agents#channel-specific-settings)).
- `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 menyetujui atau menolak permintaan exec. Opsional saat `channels.telegram.allowFrom` atau `channels.telegram.defaultTo` direct sudah mengidentifikasi pemilik.
- `channels.telegram.execApprovals.target`: `dm | channel | both` (default: `dm`). `channel` dan `both` mempertahankan 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.execApprovals.approvers`: ID pengguna Telegram yang diizinkan untuk menyetujui atau menolak permintaan exec. Opsional bila `channels.telegram.allowFrom` atau `channels.telegram.defaultTo` langsung sudah mengidentifikasi pemilik.
- `channels.telegram.execApprovals.target`: `dm | channel | both` (default: `dm`). `channel` dan `both` mempertahankan topik Telegram asal bila ada.
- `channels.telegram.execApprovals.agentFilter`: filter ID agen opsional untuk prompt persetujuan yang diteruskan.
- `channels.telegram.execApprovals.sessionFilter`: filter session key 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.
@ -1034,43 +1035,44 @@ Referensi utama:
- `channels.telegram.textChunkLimit`: ukuran chunk keluar (karakter).
- `channels.telegram.chunkMode`: `length` (default) atau `newline` untuk 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`; `progress` dipetakan ke `partial`; `block` adalah kompatibilitas mode pratinjau lama). Streaming pratinjau Telegram menggunakan satu pesan pratinjau yang diedit di tempat.
- `channels.telegram.streaming`: `off | partial | block | progress` (pratinjau live stream; default: `partial`; `progress` dipetakan ke `partial`; `block` adalah kompatibilitas mode pratinjau lama). Streaming pratinjau Telegram menggunakan satu pesan pratinjau yang diedit di tempat.
- `channels.telegram.streaming.preview.toolProgress`: gunakan kembali pesan pratinjau live untuk pembaruan tool/progress saat streaming pratinjau aktif (default: `true`). Atur `false` untuk mempertahankan pesan tool/progress 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 error API keluar yang dapat dipulihkan (attempts, minDelayMs, maxDelayMs, jitter).
- `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 (`ipv4first` atau `verbatim`). Default `ipv4first` pada Node 22+.
- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: opt-in berbahaya untuk lingkungan fake-IP atau proxy transparan tepercaya tempat unduhan media Telegram me-resolve `api.telegram.org` ke alamat private/internal/special-use di luar izin default rentang benchmark RFC 2544.
- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: opt-in berbahaya untuk lingkungan fake-IP atau proxy transparan tepercaya ketika unduhan media Telegram me-resolve `api.telegram.org` ke alamat private/internal/special-use di luar allowance rentang benchmark RFC 2544 default.
- `channels.telegram.proxy`: URL proxy untuk panggilan Bot API (SOCKS/HTTP).
- `channels.telegram.webhookUrl`: aktifkan mode webhook (memerlukan `channels.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 (default `127.0.0.1`).
- `channels.telegram.webhookPort`: port bind webhook lokal (default `8787`).
- `channels.telegram.webhookUrl`: aktifkan mode Webhook (memerlukan `channels.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 (default `127.0.0.1`).
- `channels.telegram.webhookPort`: port bind Webhook lokal (default `8787`).
- `channels.telegram.actions.reactions`: gate reaksi 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 reaksi mana yang memicu event sistem (default: `own` jika tidak diatur).
- `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` — kontrol kemampuan reaksi agent (default: `minimal` jika 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 saat outage.
- `channels.telegram.reactionNotifications`: `off | own | all` — kontrol reaksi mana yang memicu event sistem (default: `own` saat tidak diatur).
- `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` — kontrol kemampuan reaksi agen (default: `minimal` saat tidak diatur).
- `channels.telegram.errorPolicy`: `reply | silent` — kontrol 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](/id/gateway/configuration-reference#telegram)
Field Telegram khusus dengan sinyal tinggi:
Field Telegram spesifik dengan sinyal tinggi:
- startup/auth: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` harus menunjuk ke file reguler; symlink ditolak)
- kontrol akses: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, `bindings[]` level atas (`type: "acp"`)
- startup/auth: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` harus 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), `blockStreaming`
- 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`
- Webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`
- aksi/kapabilitas: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker`
- reaksi: `reactionNotifications`, `reactionLevel`
- error: `errorPolicy`, `errorCooldownMs`
- kesalahan: `errorPolicy`, `errorCooldownMs`
- penulisan/riwayat: `configWrites`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
## Terkait
@ -1079,5 +1081,5 @@ Field Telegram khusus dengan sinyal tinggi:
- [Grup](/id/channels/groups)
- [Keamanan](/id/gateway/security)
- [Routing channel](/id/channels/channel-routing)
- [Routing multi-agent](/id/concepts/multi-agent)
- [Routing multi-agen](/id/concepts/multi-agent)
- [Pemecahan masalah](/id/channels/troubleshooting)

View File

@ -1,108 +1,137 @@
---
read_when:
- Menjalankan lebih dari satu Gateway di mesin yang sama
- Anda memerlukan konfigurasi/status/port yang terisolasi per Gateway
summary: Menjalankan beberapa Gateway OpenClaw di satu host (isolasi, port, dan profil)
- Menjalankan lebih dari satu Gateway pada mesin yang sama
- Anda memerlukan konfigurasi/status/port yang terisolasi untuk setiap Gateway
summary: Menjalankan beberapa Gateway OpenClaw pada satu host (isolasi, port, dan profil)
title: Beberapa Gateway
x-i18n:
generated_at: "2026-04-05T13:53:50Z"
generated_at: "2026-04-21T17:45:37Z"
model: gpt-5.4
provider: openai
source_hash: 061f204bf56b28c6bd0e2c9aee6c561a8a162ca219060117fea4d3a007f01899
source_hash: 8c3fcb921bc6596040e9249467964bd9dcd40ea7c16e958bb378247b0f994a7b
source_path: gateway/multiple-gateways.md
workflow: 15
---
# Beberapa Gateway (host yang sama)
Sebagian besar penyiapan sebaiknya menggunakan satu Gateway karena satu Gateway dapat menangani beberapa koneksi pesan dan agen. Jika Anda memerlukan isolasi atau redundansi yang lebih kuat (misalnya bot penyelamat), jalankan Gateway terpisah dengan profil/port yang terisolasi.
Sebagian besar penyiapan sebaiknya menggunakan satu Gateway karena satu Gateway dapat menangani beberapa koneksi perpesanan dan agen. Jika Anda memerlukan isolasi atau redundansi yang lebih kuat (misalnya, bot penyelamat), jalankan Gateway terpisah dengan profil/port yang terisolasi.
## Daftar periksa isolasi (wajib)
- `OPENCLAW_CONFIG_PATH` — file konfigurasi per instans
- `OPENCLAW_STATE_DIR` — sesi, kredensial, cache per instans
- `agents.defaults.workspace` — root ruang kerja per instans
- `gateway.port` (atau `--port`) — unik per instans
- `OPENCLAW_CONFIG_PATH` — file konfigurasi per instance
- `OPENCLAW_STATE_DIR` — sesi, kredensial, cache per instance
- `agents.defaults.workspace` — root workspace per instance
- `gateway.port` (atau `--port`) — unik per instance
- Port turunan (browser/canvas) tidak boleh tumpang tindih
Jika ini dibagikan, Anda akan mengalami race konfigurasi dan konflik port.
## Direkomendasikan: profil (`--profile`)
## Disarankan: gunakan profil default untuk utama, profil bernama untuk penyelamat
Profil secara otomatis mencakup `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` dan menambahkan sufiks pada nama layanan.
Profil secara otomatis mencakup `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` dan menambahkan sufiks pada nama layanan. Untuk sebagian besar penyiapan bot penyelamat, pertahankan bot utama pada profil default dan berikan hanya bot penyelamat profil bernama seperti `rescue`.
```bash
# utama
openclaw --profile main setup
openclaw --profile main gateway --port 18789
# utama (profil default)
openclaw setup
openclaw gateway --port 18789
# rescue
# penyelamat
openclaw --profile rescue setup
openclaw --profile rescue gateway --port 19001
```
Layanan per profil:
Layanan:
```bash
openclaw --profile main gateway install
openclaw gateway install
openclaw --profile rescue gateway install
```
Jika Anda ingin kedua Gateway menggunakan profil bernama, itu juga berfungsi, tetapi tidak wajib.
## Panduan bot penyelamat
Jalankan Gateway kedua di host yang sama dengan miliknya sendiri:
Penyiapan yang disarankan:
- profil/konfigurasi
- direktori status
- ruang kerja
- port dasar (plus port turunan)
- pertahankan bot utama pada profil default
- jalankan bot penyelamat pada `--profile rescue`
- gunakan bot Telegram yang benar-benar terpisah untuk akun penyelamat
- pertahankan bot penyelamat pada port dasar yang berbeda seperti `19001`
Ini menjaga bot penyelamat tetap terisolasi dari bot utama sehingga dapat men-debug atau menerapkan perubahan konfigurasi jika bot utama tidak aktif.
Ini menjaga bot penyelamat tetap terisolasi dari bot utama sehingga ia dapat melakukan debug atau menerapkan perubahan konfigurasi jika bot utama tidak aktif. Sisakan setidaknya 20 port di antara port dasar agar port turunan browser/canvas/CDP tidak pernah bertabrakan.
Jarak port: sisakan setidaknya 20 port di antara port dasar agar port browser/canvas/CDP turunan tidak pernah bertabrakan.
### Channel/akun penyelamat yang disarankan
### Cara menginstal (bot penyelamat)
Untuk sebagian besar penyiapan, gunakan bot Telegram yang benar-benar terpisah untuk profil penyelamat.
Mengapa Telegram:
- mudah dibatasi hanya untuk operator
- token dan identitas bot terpisah
- independen dari instalasi channel/aplikasi bot utama
- jalur pemulihan berbasis DM yang sederhana saat bot utama rusak
Bagian yang penting adalah kemandirian penuh: akun bot terpisah, kredensial terpisah, profil OpenClaw terpisah, workspace terpisah, dan port terpisah.
### Alur instalasi yang disarankan
Gunakan ini sebagai penyiapan default kecuali Anda memiliki alasan kuat untuk melakukan hal lain:
```bash
# Bot utama (sudah ada atau baru, tanpa parameter --profile)
# Berjalan di port 18789 + port Chrome CDC/Canvas/...
# Bot utama (profil default, port 18789)
openclaw onboard
openclaw gateway install
# Bot penyelamat (profil + port terisolasi)
# Bot penyelamat (bot Telegram terpisah, profil terpisah, port 19001)
openclaw --profile rescue onboard
# Catatan:
# - nama ruang kerja akan diberi akhiran -rescue secara default
# - Port harus setidaknya 18789 + 20 Port,
# lebih baik pilih port dasar yang benar-benar berbeda, seperti 19789,
# - sisanya dari onboarding sama seperti biasa
# Untuk menginstal layanan (jika belum terjadi otomatis saat setup)
openclaw --profile rescue gateway install
```
Selama `openclaw --profile rescue onboard`:
- gunakan token bot Telegram yang terpisah
- pertahankan profil `rescue`
- gunakan port dasar yang setidaknya 20 lebih tinggi daripada bot utama
- terima workspace penyelamat default kecuali Anda sudah mengelolanya sendiri
Jika onboarding sudah memasang layanan penyelamat untuk Anda, `gateway install` terakhir tidak diperlukan.
### Apa yang diubah oleh onboarding
`openclaw --profile rescue onboard` menggunakan alur onboarding normal, tetapi menulis semuanya ke dalam profil terpisah.
Dalam praktiknya, itu berarti bot penyelamat mendapatkan miliknya sendiri:
- file konfigurasi
- direktori status
- workspace (secara default `~/.openclaw/workspace-rescue`)
- nama layanan terkelola
Selain itu, prompt-nya sama seperti onboarding normal.
## Pemetaan port (turunan)
Port dasar = `gateway.port` (atau `OPENCLAW_GATEWAY_PORT` / `--port`).
- port layanan kontrol browser = dasar + 2 (hanya loopback)
- host canvas dilayani pada server HTTP Gateway (port yang sama dengan `gateway.port`)
- Port CDP profil browser dialokasikan otomatis dari `browser.controlPort + 9 .. + 108`
- host canvas disajikan pada server HTTP Gateway (port yang sama dengan `gateway.port`)
- port CDP profil browser dialokasikan otomatis dari `browser.controlPort + 9 .. + 108`
Jika Anda menimpa salah satu dari ini di konfigurasi atau env, Anda harus menjaganya tetap unik per instans.
Jika Anda menimpa salah satu dari ini di konfigurasi atau env, Anda harus menjaganya tetap unik per instance.
## Catatan browser/CDP (jebakan umum)
- **Jangan** menetapkan `browser.cdpUrl` ke nilai yang sama pada beberapa instans.
- Setiap instans memerlukan port kontrol browser dan rentang CDP-nya sendiri (diturunkan dari port gateway-nya).
- Jika Anda memerlukan port CDP eksplisit, setel `browser.profiles.<name>.cdpPort` per instans.
- Chrome jarak jauh: gunakan `browser.profiles.<name>.cdpUrl` (per profil, per instans).
- **Jangan** sematkan `browser.cdpUrl` ke nilai yang sama pada beberapa instance.
- Setiap instance memerlukan port kontrol browser dan rentang CDP-nya sendiri (diturunkan dari port gateway-nya).
- Jika Anda memerlukan port CDP eksplisit, atur `browser.profiles.<name>.cdpPort` per instance.
- Chrome jarak jauh: gunakan `browser.profiles.<name>.cdpUrl` (per profil, per instance).
## Contoh env manual
```bash
OPENCLAW_CONFIG_PATH=~/.openclaw/main.json \
OPENCLAW_STATE_DIR=~/.openclaw-main \
OPENCLAW_STATE_DIR=~/.openclaw \
openclaw gateway --port 18789
OPENCLAW_CONFIG_PATH=~/.openclaw/rescue.json \
@ -113,15 +142,15 @@ openclaw gateway --port 19001
## Pemeriksaan cepat
```bash
openclaw --profile main gateway status --deep
openclaw gateway status --deep
openclaw --profile rescue gateway status --deep
openclaw --profile rescue gateway probe
openclaw --profile main status
openclaw status
openclaw --profile rescue status
openclaw --profile rescue browser status
```
Interpretasi:
- `gateway status --deep` membantu mendeteksi layanan launchd/systemd/schtasks lama yang masih tersisa dari instalasi sebelumnya.
- Teks peringatan `gateway probe` seperti `multiple reachable gateways detected` hanya diharapkan saat Anda memang sengaja menjalankan lebih dari satu gateway terisolasi.
- `gateway status --deep` membantu mendeteksi layanan launchd/systemd/schtasks usang dari instalasi yang lebih lama.
- Teks peringatan `gateway probe` seperti `multiple reachable gateways detected` hanya diharapkan ketika Anda memang sengaja menjalankan lebih dari satu gateway terisolasi.

View File

@ -2,37 +2,37 @@
read_when:
- Menggunakan atau mengonfigurasi perintah chat
- Men-debug perutean perintah atau izin
summary: 'Perintah slash: teks vs native, config, dan perintah yang didukung'
title: Perintah slash
summary: 'Perintah garis miring: teks vs native, konfigurasi, dan perintah yang didukung'
title: Perintah Garis Miring
x-i18n:
generated_at: "2026-04-21T09:25:02Z"
generated_at: "2026-04-21T17:45:39Z"
model: gpt-5.4
provider: openai
source_hash: d90ddee54af7c05b7fdf486590561084581d750e42cd14674d43bbdc0984df5d
source_hash: 26923608329ba2aeece2d4bc8edfa40ae86e03719a9f590f26ff79f57d97521d
source_path: tools/slash-commands.md
workflow: 15
---
# Perintah slash
# Perintah garis miring
Perintah ditangani oleh Gateway. Sebagian besar perintah harus dikirim sebagai pesan **mandiri** yang dimulai dengan `/`.
Perintah chat bash khusus host menggunakan `! <cmd>` (dengan `/bash <cmd>` sebagai alias).
Ada dua sistem terkait:
Ada dua sistem yang terkait:
- **Perintah**: pesan mandiri `/...`.
- **Directive**: `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
- Directive dihapus dari pesan sebelum model melihatnya.
- Dalam pesan chat normal (bukan hanya-directive), directive diperlakukan sebagai “petunjuk inline” dan **tidak** mempertahankan pengaturan sesi.
- Dalam pesan hanya-directive (pesan hanya berisi directive), directive dipertahankan ke sesi dan membalas dengan pengakuan.
- Directive hanya diterapkan untuk **pengirim yang diotorisasi**. Jika `commands.allowFrom` disetel, itu adalah satu-satunya
allowlist yang digunakan; jika tidak, otorisasi berasal dari allowlist/pairing channel plus `commands.useAccessGroups`.
Pengirim yang tidak diotorisasi akan melihat directive diperlakukan sebagai teks biasa.
- **Perintah**: pesan `/...` mandiri.
- **Direktif**: `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
- Direktif dihapus dari pesan sebelum model melihatnya.
- Dalam pesan chat normal (bukan hanya direktif), direktif diperlakukan sebagai “petunjuk inline” dan **tidak** mempertahankan pengaturan sesi.
- Dalam pesan yang hanya berisi direktif (pesan hanya berisi direktif), direktif dipertahankan ke sesi dan membalas dengan sebuah konfirmasi.
- Direktif hanya diterapkan untuk **pengirim yang berwenang**. Jika `commands.allowFrom` diatur, itu adalah satu-satunya
allowlist yang digunakan; jika tidak, otorisasi berasal dari allowlist/pairing channel ditambah `commands.useAccessGroups`.
Pengirim yang tidak berwenang akan melihat direktif diperlakukan sebagai teks biasa.
Ada juga beberapa **shortcut inline** (hanya untuk pengirim yang di-allowlist/diotorisasi): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Shortcut ini langsung dijalankan, dihapus sebelum model melihat pesan, dan sisa teksnya melanjutkan melalui alur normal.
Ada juga beberapa **shortcut inline** (hanya untuk pengirim yang di-allowlist/berwenang): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Shortcut ini berjalan segera, dihapus sebelum model melihat pesan, dan sisa teks melanjutkan melalui alur normal.
## Config
## Konfigurasi
```json5
{
@ -60,27 +60,28 @@ Shortcut ini langsung dijalankan, dihapus sebelum model melihat pesan, dan sisa
```
- `commands.text` (default `true`) mengaktifkan parsing `/...` dalam pesan chat.
- Pada surface tanpa perintah native (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi meskipun Anda menyetel ini ke `false`.
- Pada permukaan tanpa perintah native (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi meskipun Anda mengatur ini ke `false`.
- `commands.native` (default `"auto"`) mendaftarkan perintah native.
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (sampai Anda menambahkan slash command); diabaikan untuk provider tanpa dukungan native.
- Setel `channels.discord.commands.native`, `channels.telegram.commands.native`, atau `channels.slack.commands.native` untuk override per provider (bool atau `"auto"`).
- `false` menghapus perintah yang sebelumnya terdaftar di Discord/Telegram saat startup. Perintah Slack dikelola di app Slack dan tidak dihapus secara otomatis.
- `commands.nativeSkills` (default `"auto"`) mendaftarkan perintah **skill** secara native bila didukung.
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack memerlukan pembuatan slash command per skill).
- Setel `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills`, atau `channels.slack.commands.nativeSkills` untuk override per provider (bool atau `"auto"`).
- Atur `channels.discord.commands.native`, `channels.telegram.commands.native`, atau `channels.slack.commands.native` untuk menimpa per provider (bool atau `"auto"`).
- `false` menghapus perintah yang sebelumnya terdaftar di Discord/Telegram saat startup. Perintah Slack dikelola di aplikasi Slack dan tidak dihapus secara otomatis.
- `commands.nativeSkills` (default `"auto"`) mendaftarkan perintah **skill** secara native saat didukung.
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack mengharuskan pembuatan satu slash command per skill).
- Atur `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills`, atau `channels.slack.commands.nativeSkills` untuk menimpa per provider (bool atau `"auto"`).
- `commands.bash` (default `false`) mengaktifkan `! <cmd>` untuk menjalankan perintah shell host (`/bash <cmd>` adalah alias; memerlukan allowlist `tools.elevated`).
- `commands.bashForegroundMs` (default `2000`) mengontrol berapa lama bash menunggu sebelum beralih ke mode latar belakang (`0` langsung ke latar belakang).
- `commands.bashForegroundMs` (default `2000`) mengontrol berapa lama bash menunggu sebelum beralih ke mode latar belakang (`0` langsung menjalankannya di latar belakang).
- `commands.config` (default `false`) mengaktifkan `/config` (membaca/menulis `openclaw.json`).
- `commands.mcp` (default `false`) mengaktifkan `/mcp` (membaca/menulis config MCP yang dikelola OpenClaw di bawah `mcp.servers`).
- `commands.plugins` (default `false`) mengaktifkan `/plugins` (penemuan/status plugin plus kontrol install + enable/disable).
- `commands.debug` (default `false`) mengaktifkan `/debug` (override hanya-runtime).
- `commands.restart` (default `true`) mengaktifkan `/restart` plus aksi tool restart gateway.
- `commands.ownerAllowFrom` (opsional) menetapkan allowlist owner eksplisit untuk surface perintah/tool khusus owner. Ini terpisah dari `commands.allowFrom`.
- `commands.ownerDisplay` mengontrol bagaimana owner id muncul dalam system prompt: `raw` atau `hash`.
- `commands.ownerDisplaySecret` secara opsional menetapkan secret HMAC yang digunakan saat `commands.ownerDisplay="hash"`.
- `commands.allowFrom` (opsional) menetapkan allowlist per-provider untuk otorisasi perintah. Saat dikonfigurasi, ini adalah
satu-satunya sumber otorisasi untuk perintah dan directive (`commands.useAccessGroups` dan allowlist/pairing channel diabaikan). Gunakan `"*"` untuk default global; kunci khusus provider menimpanya.
- `commands.useAccessGroups` (default `true`) menerapkan allowlist/kebijakan untuk perintah saat `commands.allowFrom` tidak disetel.
- `commands.mcp` (default `false`) mengaktifkan `/mcp` (membaca/menulis konfigurasi MCP yang dikelola OpenClaw di bawah `mcp.servers`).
- `commands.plugins` (default `false`) mengaktifkan `/plugins` (penemuan/status plugin serta kontrol instal + aktif/nonaktif).
- `commands.debug` (default `false`) mengaktifkan `/debug` (override hanya saat runtime).
- `commands.restart` (default `true`) mengaktifkan `/restart` plus tindakan alat restart gateway.
- `commands.ownerAllowFrom` (opsional) menetapkan allowlist pemilik eksplisit untuk permukaan perintah/alat khusus pemilik. Ini terpisah dari `commands.allowFrom`.
- `commands.ownerDisplay` mengontrol bagaimana id pemilik muncul dalam system prompt: `raw` atau `hash`.
- `commands.ownerDisplaySecret` secara opsional menetapkan rahasia HMAC yang digunakan saat `commands.ownerDisplay="hash"`.
- `commands.allowFrom` (opsional) menetapkan allowlist per provider untuk otorisasi perintah. Saat dikonfigurasi, ini adalah
satu-satunya sumber otorisasi untuk perintah dan direktif (allowlist/pairing channel dan `commands.useAccessGroups`
diabaikan). Gunakan `"*"` untuk default global; kunci khusus provider menimpa itu.
- `commands.useAccessGroups` (default `true`) menerapkan allowlist/kebijakan untuk perintah saat `commands.allowFrom` tidak diatur.
## Daftar perintah
@ -89,61 +90,62 @@ Sumber kebenaran saat ini:
- built-in inti berasal dari `src/auto-reply/commands-registry.shared.ts`
- perintah dock yang dihasilkan berasal dari `src/auto-reply/commands-registry.data.ts`
- perintah plugin berasal dari pemanggilan `registerCommand()` plugin
- ketersediaan aktual di gateway Anda tetap bergantung pada flag config, surface channel, dan plugin yang diinstal/diaktifkan
- ketersediaan sebenarnya pada gateway Anda tetap bergantung pada flag konfigurasi, permukaan channel, dan plugin yang terpasang/aktif
### Perintah built-in inti
Perintah built-in yang tersedia saat ini:
- `/new [model]` memulai sesi baru; `/reset` adalah alias reset.
- `/compact [instructions]` melakukan Compaction pada konteks sesi. Lihat [/concepts/compaction](/id/concepts/compaction).
- `/reset soft [message]` mempertahankan transkrip saat ini, menghapus id sesi backend CLI yang digunakan ulang, dan menjalankan ulang pemuatan startup/system-prompt di tempat.
- `/compact [instructions]` memadatkan konteks sesi. Lihat [/concepts/compaction](/id/concepts/compaction).
- `/stop` membatalkan run saat ini.
- `/session idle <duration|off>` dan `/session max-age <duration|off>` mengelola masa berlaku thread-binding.
- `/think <level>` menetapkan level thinking. Opsi berasal dari profil provider model aktif; level umum adalah `off`, `minimal`, `low`, `medium`, dan `high`, dengan level kustom seperti `xhigh`, `adaptive`, `max`, atau biner `on` hanya bila didukung. Alias: `/thinking`, `/t`.
- `/verbose on|off|full` mengaktifkan atau menonaktifkan output verbose. Alias: `/v`.
- `/trace on|off` mengaktifkan atau menonaktifkan output trace plugin untuk sesi saat ini.
- `/fast [status|on|off]` menampilkan atau menetapkan fast mode.
- `/reasoning [on|off|stream]` mengaktifkan atau menonaktifkan visibilitas reasoning. Alias: `/reason`.
- `/elevated [on|off|ask|full]` mengaktifkan atau menonaktifkan elevated mode. Alias: `/elev`.
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` menampilkan atau menetapkan default exec.
- `/model [name|#|status]` menampilkan atau menetapkan model.
- `/models [provider] [page] [limit=<n>|size=<n>|all]` mencantumkan provider atau model untuk suatu provider.
- `/queue <mode>` mengelola perilaku antrean (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) plus opsi seperti `debounce:2s cap:25 drop:summarize`.
- `/session idle <duration|off>` dan `/session max-age <duration|off>` mengelola kedaluwarsa pengikatan thread.
- `/think <level>` mengatur level berpikir. Opsi berasal dari profil provider model aktif; level umum adalah `off`, `minimal`, `low`, `medium`, dan `high`, dengan level khusus seperti `xhigh`, `adaptive`, `max`, atau biner `on` hanya jika didukung. Alias: `/thinking`, `/t`.
- `/verbose on|off|full` mengaktifkan/menonaktifkan output verbose. Alias: `/v`.
- `/trace on|off` mengaktifkan/menonaktifkan output trace plugin untuk sesi saat ini.
- `/fast [status|on|off]` menampilkan atau mengatur mode cepat.
- `/reasoning [on|off|stream]` mengaktifkan/menonaktifkan visibilitas reasoning. Alias: `/reason`.
- `/elevated [on|off|ask|full]` mengaktifkan/menonaktifkan mode elevated. Alias: `/elev`.
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` menampilkan atau mengatur default exec.
- `/model [name|#|status]` menampilkan atau mengatur model.
- `/models [provider] [page] [limit=<n>|size=<n>|all]` mencantumkan provider atau model untuk sebuah provider.
- `/queue <mode>` mengelola perilaku antrean (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) beserta opsi seperti `debounce:2s cap:25 drop:summarize`.
- `/help` menampilkan ringkasan bantuan singkat.
- `/commands` menampilkan katalog perintah yang dihasilkan.
- `/tools [compact|verbose]` menampilkan apa yang dapat digunakan agent saat ini.
- `/status` menampilkan status runtime, termasuk usage/kuota provider bila tersedia.
- `/tasks` mencantumkan tugas latar belakang aktif/baru-baru ini untuk sesi saat ini.
- `/context [list|detail|json]` menjelaskan cara konteks dirakit.
- `/tools [compact|verbose]` menampilkan apa yang bisa digunakan agen saat ini sekarang juga.
- `/status` menampilkan status runtime, termasuk penggunaan/kuota provider jika tersedia.
- `/tasks` mencantumkan tugas latar belakang aktif/terbaru untuk sesi saat ini.
- `/context [list|detail|json]` menjelaskan bagaimana konteks dirakit.
- `/export-session [path]` mengekspor sesi saat ini ke HTML. Alias: `/export`.
- `/whoami` menampilkan sender id Anda. Alias: `/id`.
- `/skill <name> [input]` menjalankan skill berdasarkan nama.
- `/whoami` menampilkan id pengirim Anda. Alias: `/id`.
- `/skill <name> [input]` menjalankan sebuah skill berdasarkan nama.
- `/allowlist [list|add|remove] ...` mengelola entri allowlist. Hanya teks.
- `/approve <id> <decision>` menyelesaikan prompt persetujuan exec.
- `/btw <question>` mengajukan pertanyaan sampingan tanpa mengubah konteks sesi di masa depan. Lihat [/tools/btw](/id/tools/btw).
- `/btw <question>` mengajukan pertanyaan sampingan tanpa mengubah konteks sesi mendatang. Lihat [/tools/btw](/id/tools/btw).
- `/subagents list|kill|log|info|send|steer|spawn` mengelola run sub-agent untuk sesi saat ini.
- `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` mengelola sesi ACP dan opsi runtime.
- `/focus <target>` mengikat thread Discord atau topik/percakapan Telegram saat ini ke target sesi.
- `/unfocus` menghapus ikatan saat ini.
- `/agents` mencantumkan agent yang terikat thread untuk sesi saat ini.
- `/unfocus` menghapus pengikatan saat ini.
- `/agents` mencantumkan agen yang terikat ke thread untuk sesi saat ini.
- `/kill <id|#|all>` membatalkan satu atau semua sub-agent yang sedang berjalan.
- `/steer <id|#> <message>` mengirim steering ke sub-agent yang sedang berjalan. Alias: `/tell`.
- `/config show|get|set|unset` membaca atau menulis `openclaw.json`. Khusus owner. Memerlukan `commands.config: true`.
- `/mcp show|get|set|unset` membaca atau menulis config server MCP yang dikelola OpenClaw di bawah `mcp.servers`. Khusus owner. Memerlukan `commands.mcp: true`.
- `/plugins list|inspect|show|get|install|enable|disable` memeriksa atau mengubah status plugin. `/plugin` adalah alias. Khusus owner untuk penulisan. Memerlukan `commands.plugins: true`.
- `/debug show|set|unset|reset` mengelola override config hanya-runtime. Khusus owner. Memerlukan `commands.debug: true`.
- `/usage off|tokens|full|cost` mengontrol footer usage per-respons atau mencetak ringkasan biaya lokal.
- `/steer <id|#> <message>` mengirim arahan ke sub-agent yang sedang berjalan. Alias: `/tell`.
- `/config show|get|set|unset` membaca atau menulis `openclaw.json`. Khusus pemilik. Memerlukan `commands.config: true`.
- `/mcp show|get|set|unset` membaca atau menulis konfigurasi server MCP yang dikelola OpenClaw di bawah `mcp.servers`. Khusus pemilik. Memerlukan `commands.mcp: true`.
- `/plugins list|inspect|show|get|install|enable|disable` memeriksa atau memutasi status plugin. `/plugin` adalah alias. Penulisan hanya untuk pemilik. Memerlukan `commands.plugins: true`.
- `/debug show|set|unset|reset` mengelola override konfigurasi hanya saat runtime. Khusus pemilik. Memerlukan `commands.debug: true`.
- `/usage off|tokens|full|cost` mengontrol footer penggunaan per respons atau mencetak ringkasan biaya lokal.
- `/tts on|off|status|provider|limit|summary|audio|help` mengontrol TTS. Lihat [/tools/tts](/id/tools/tts).
- `/restart` me-restart OpenClaw saat diaktifkan. Default: aktif; setel `commands.restart: false` untuk menonaktifkannya.
- `/activation mention|always` menetapkan mode aktivasi grup.
- `/send on|off|inherit` menetapkan kebijakan pengiriman. Khusus owner.
- `/restart` memulai ulang OpenClaw saat diaktifkan. Default: aktif; atur `commands.restart: false` untuk menonaktifkannya.
- `/activation mention|always` mengatur mode aktivasi grup.
- `/send on|off|inherit` mengatur kebijakan pengiriman. Khusus pemilik.
- `/bash <command>` menjalankan perintah shell host. Hanya teks. Alias: `! <command>`. Memerlukan `commands.bash: true` plus allowlist `tools.elevated`.
- `!poll [sessionId]` memeriksa job bash latar belakang.
- `!stop [sessionId]` menghentikan job bash latar belakang.
- `!poll [sessionId]` memeriksa pekerjaan bash latar belakang.
- `!stop [sessionId]` menghentikan pekerjaan bash latar belakang.
### Perintah dock yang dihasilkan
Perintah dock dihasilkan dari plugin channel dengan dukungan native-command. Set bawaan saat ini:
Perintah dock dihasilkan dari plugin channel dengan dukungan perintah native. Kumpulan bawaan saat ini:
- `/dock-discord` (alias: `/dock_discord`)
- `/dock-mattermost` (alias: `/dock_mattermost`)
@ -152,12 +154,12 @@ Perintah dock dihasilkan dari plugin channel dengan dukungan native-command. Set
### Perintah plugin bawaan
Plugin bawaan dapat menambahkan lebih banyak slash command. Perintah bawaan saat ini di repo ini:
Plugin bawaan dapat menambahkan lebih banyak slash command. Perintah bawaan saat ini dalam repo ini:
- `/dreaming [on|off|status|help]` mengaktifkan atau menonaktifkan Dreaming memory. Lihat [Dreaming](/id/concepts/dreaming).
- `/dreaming [on|off|status|help]` mengaktifkan/menonaktifkan Dreaming memori. Lihat [Dreaming](/id/concepts/dreaming).
- `/pair [qr|status|pending|approve|cleanup|notify]` mengelola alur pairing/penyiapan perangkat. Lihat [Pairing](/id/channels/pairing).
- `/phone status|arm <camera|screen|writes|all> [duration]|disarm` mempersenjatai sementara perintah node ponsel berisiko tinggi.
- `/voice status|list [limit]|set <voiceId|name>` mengelola config suara Talk. Di Discord, nama perintah native adalah `/talkvoice`.
- `/phone status|arm <camera|screen|writes|all> [duration]|disarm` untuk sementara mengaktifkan perintah node ponsel berisiko tinggi.
- `/voice status|list [limit]|set <voiceId|name>` mengelola konfigurasi suara Talk. Di Discord, nama perintah native adalah `/talkvoice`.
- `/card ...` mengirim preset rich card LINE. Lihat [LINE](/id/channels/line).
- `/codex status|models|threads|resume|compact|review|account|mcp|skills` memeriksa dan mengontrol harness app-server Codex bawaan. Lihat [Codex Harness](/id/plugins/codex-harness).
- Perintah khusus QQBot:
@ -173,74 +175,74 @@ Skill yang dapat dipanggil pengguna juga diekspos sebagai slash command:
- `/skill <name> [input]` selalu berfungsi sebagai entrypoint generik.
- skill juga dapat muncul sebagai perintah langsung seperti `/prose` saat skill/plugin mendaftarkannya.
- pendaftaran perintah skill native dikendalikan oleh `commands.nativeSkills` dan `channels.<provider>.commands.nativeSkills`.
- pendaftaran perintah skill native dikontrol oleh `commands.nativeSkills` dan `channels.<provider>.commands.nativeSkills`.
Catatan:
- Perintah menerima `:` opsional di antara perintah dan argumen (misalnya `/think: high`, `/send: on`, `/help:`).
- `/new <model>` menerima alias model, `provider/model`, atau nama provider (fuzzy match); jika tidak ada kecocokan, teks diperlakukan sebagai body pesan.
- Untuk rincian usage provider lengkap, gunakan `openclaw status --usage`.
- `/allowlist add|remove` memerlukan `commands.config=true` dan menghormati `configWrites` channel.
- Di channel multi-akun, `/allowlist --account <id>` yang menargetkan config dan `/config set channels.<provider>.accounts.<id>...` juga menghormati `configWrites` akun target.
- `/usage` mengontrol footer usage per-respons; `/usage cost` mencetak ringkasan biaya lokal dari log sesi OpenClaw.
- `/restart` diaktifkan secara default; setel `commands.restart: false` untuk menonaktifkannya.
- `/plugins install <spec>` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/archive lokal, paket npm, atau `clawhub:<pkg>`.
- `/plugins enable|disable` memperbarui config plugin dan dapat meminta restart.
- Perintah native khusus Discord: `/vc join|leave|status` mengontrol voice channel (memerlukan `channels.discord.voice` dan perintah native; tidak tersedia sebagai teks).
- Perintah thread-binding Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) memerlukan thread binding efektif diaktifkan (`session.threadBindings.enabled` dan/atau `channels.discord.threadBindings.enabled`).
- Perintah menerima `:` opsional antara perintah dan argumen (misalnya `/think: high`, `/send: on`, `/help:`).
- `/new <model>` menerima alias model, `provider/model`, atau nama provider (pencocokan fuzzy); jika tidak ada yang cocok, teks diperlakukan sebagai isi pesan.
- Untuk rincian lengkap penggunaan provider, gunakan `openclaw status --usage`.
- `/allowlist add|remove` memerlukan `commands.config=true` dan mematuhi `configWrites` channel.
- Pada channel multi-akun, `/allowlist --account <id>` yang menargetkan konfigurasi dan `/config set channels.<provider>.accounts.<id>...` juga mematuhi `configWrites` akun target.
- `/usage` mengontrol footer penggunaan per respons; `/usage cost` mencetak ringkasan biaya lokal dari log sesi OpenClaw.
- `/restart` diaktifkan secara default; atur `commands.restart: false` untuk menonaktifkannya.
- `/plugins install <spec>` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/arsip lokal, paket npm, atau `clawhub:<pkg>`.
- `/plugins enable|disable` memperbarui konfigurasi plugin dan mungkin meminta restart.
- Perintah native khusus Discord: `/vc join|leave|status` mengontrol channel suara (memerlukan `channels.discord.voice` dan perintah native; tidak tersedia sebagai teks).
- Perintah pengikatan thread Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) memerlukan pengikatan thread efektif diaktifkan (`session.threadBindings.enabled` dan/atau `channels.discord.threadBindings.enabled`).
- Referensi perintah ACP dan perilaku runtime: [ACP Agents](/id/tools/acp-agents).
- `/verbose` dimaksudkan untuk debugging dan visibilitas tambahan; biarkan **off** dalam penggunaan normal.
- `/trace` lebih sempit daripada `/verbose`: hanya menampilkan baris trace/debug milik plugin dan membiarkan percakapan tool verbose normal tetap nonaktif.
- `/fast on|off` mempertahankan override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan kembali ke default config.
- `/verbose` ditujukan untuk debugging dan visibilitas tambahan; biarkan **off** dalam penggunaan normal.
- `/trace` lebih sempit daripada `/verbose`: ini hanya menampilkan baris trace/debug milik plugin dan tetap mematikan keluaran alat verbose normal.
- `/fast on|off` mempertahankan override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan kembali ke default konfigurasi.
- `/fast` bersifat khusus provider: OpenAI/OpenAI Codex memetakannya ke `service_tier=priority` pada endpoint Responses native, sedangkan permintaan Anthropic publik langsung, termasuk lalu lintas terautentikasi OAuth yang dikirim ke `api.anthropic.com`, memetakannya ke `service_tier=auto` atau `standard_only`. Lihat [OpenAI](/id/providers/openai) dan [Anthropic](/id/providers/anthropic).
- Ringkasan kegagalan tool tetap ditampilkan saat relevan, tetapi teks kegagalan terperinci hanya disertakan saat `/verbose` adalah `on` atau `full`.
- `/reasoning`, `/verbose`, dan `/trace` berisiko dalam pengaturan grup: perintah ini dapat mengungkap reasoning internal, output tool, atau diagnostik plugin yang tidak Anda maksudkan untuk diekspos. Sebaiknya biarkan nonaktif, terutama di chat grup.
- `/model` mempertahankan model sesi baru segera.
- Jika agent sedang idle, run berikutnya langsung menggunakannya.
- Jika run sudah aktif, OpenClaw menandai live switch sebagai pending dan hanya me-restart ke model baru pada titik retry yang bersih.
- Jika aktivitas tool atau output balasan sudah dimulai, switch pending dapat tetap antre sampai peluang retry berikutnya atau giliran pengguna berikutnya.
- **Jalur cepat:** pesan hanya-perintah dari pengirim yang di-allowlist ditangani segera (melewati antrean + model).
- **Gating mention grup:** pesan hanya-perintah dari pengirim yang di-allowlist melewati persyaratan mention.
- **Shortcut inline (hanya pengirim yang di-allowlist):** perintah tertentu juga berfungsi saat disematkan dalam pesan normal dan dihapus sebelum model melihat sisa teks.
- Ringkasan kegagalan alat tetap ditampilkan saat relevan, tetapi teks kegagalan terperinci hanya disertakan saat `/verbose` bernilai `on` atau `full`.
- `/reasoning`, `/verbose`, dan `/trace` berisiko dalam pengaturan grup: perintah ini dapat mengungkap reasoning internal, keluaran alat, atau diagnostik plugin yang tidak Anda maksudkan untuk ditampilkan. Sebaiknya biarkan nonaktif, terutama di chat grup.
- `/model` segera mempertahankan model sesi yang baru.
- Jika agen sedang idle, run berikutnya langsung menggunakannya.
- Jika sebuah run sudah aktif, OpenClaw menandai perpindahan langsung sebagai tertunda dan hanya memulai ulang ke model baru pada titik retry yang bersih.
- Jika aktivitas alat atau keluaran balasan sudah dimulai, perpindahan tertunda dapat tetap antre sampai ada kesempatan retry berikutnya atau giliran pengguna berikutnya.
- **Jalur cepat:** pesan yang hanya berisi perintah dari pengirim yang di-allowlist ditangani segera (melewati antrean + model).
- **Pembatasan mention grup:** pesan yang hanya berisi perintah dari pengirim yang di-allowlist melewati persyaratan mention.
- **Shortcut inline (hanya pengirim yang di-allowlist):** perintah tertentu juga berfungsi saat disisipkan dalam pesan normal dan dihapus sebelum model melihat sisa teks.
- Contoh: `hey /status` memicu balasan status, dan sisa teks melanjutkan melalui alur normal.
- Saat ini: `/help`, `/commands`, `/status`, `/whoami` (`/id`).
- Pesan hanya-perintah yang tidak diotorisasi diabaikan secara diam-diam, dan token inline `/...` diperlakukan sebagai teks biasa.
- **Perintah skill:** skill `user-invocable` diekspos sebagai slash command. Nama disanitasi menjadi `a-z0-9_` (maks 32 karakter); tabrakan mendapat sufiks numerik (misalnya `_2`).
- `/skill <name> [input]` menjalankan skill berdasarkan nama (berguna saat batas perintah native mencegah perintah per-skill).
- Pesan yang hanya berisi perintah dari pihak yang tidak berwenang diabaikan secara diam-diam, dan token inline `/...` diperlakukan sebagai teks biasa.
- **Perintah skill:** skill `user-invocable` diekspos sebagai slash command. Nama dibersihkan menjadi `a-z0-9_` (maks 32 karakter); tabrakan nama akan mendapat sufiks numerik (misalnya `_2`).
- `/skill <name> [input]` menjalankan skill berdasarkan nama (berguna saat batas perintah native mencegah per-skill command).
- Secara default, perintah skill diteruskan ke model sebagai permintaan normal.
- Skill secara opsional dapat mendeklarasikan `command-dispatch: tool` untuk merutekan perintah langsung ke tool (deterministik, tanpa model).
- Contoh: `/prose` (Plugin OpenProse) — lihat [OpenProse](/id/prose).
- **Argumen perintah native:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol saat Anda menghilangkan argumen wajib). Telegram dan Slack menampilkan menu tombol saat suatu perintah mendukung pilihan dan Anda menghilangkan argumennya.
- Skill dapat secara opsional mendeklarasikan `command-dispatch: tool` untuk merutekan perintah langsung ke alat (deterministik, tanpa model).
- Contoh: `/prose` (plugin OpenProse) — lihat [OpenProse](/id/prose).
- **Argumen perintah native:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol saat Anda mengabaikan argumen wajib). Telegram dan Slack menampilkan menu tombol saat sebuah perintah mendukung pilihan dan Anda mengabaikan argumennya.
## `/tools`
`/tools` menjawab pertanyaan runtime, bukan pertanyaan config: **apa yang dapat digunakan agent ini saat ini dalam
`/tools` menjawab pertanyaan runtime, bukan pertanyaan konfigurasi: **apa yang dapat digunakan agen ini saat ini dalam
percakapan ini**.
- `/tools` default bersifat ringkas dan dioptimalkan untuk pemindaian cepat.
- `/tools verbose` menambahkan deskripsi singkat.
- Surface native-command yang mendukung argumen mengekspos switch mode yang sama sebagai `compact|verbose`.
- Hasil berscope sesi, jadi mengganti agent, channel, thread, otorisasi pengirim, atau model dapat
mengubah output.
- `/tools` mencakup tool yang benar-benar dapat dijangkau saat runtime, termasuk tool inti, tool plugin yang terhubung, dan tool milik channel.
- Permukaan perintah native yang mendukung argumen menampilkan peralihan mode yang sama sebagai `compact|verbose`.
- Hasil bersifat tercakup sesi, jadi mengganti agen, channel, thread, otorisasi pengirim, atau model dapat
mengubah keluarannya.
- `/tools` mencakup alat yang benar-benar dapat dijangkau saat runtime, termasuk alat inti, alat plugin yang terhubung, dan alat milik channel.
Untuk pengeditan profil dan override, gunakan panel Tools di Control UI atau surface config/katalog
Untuk pengeditan profil dan override, gunakan panel Tools di UI Control atau permukaan konfigurasi/katalog
alih-alih memperlakukan `/tools` sebagai katalog statis.
## Surface usage (apa yang ditampilkan di mana)
## Permukaan penggunaan (apa yang muncul di mana)
- **Usage/kuota provider** (contoh: “Claude 80% left”) muncul di `/status` untuk provider model saat ini ketika pelacakan usage diaktifkan. OpenClaw menormalisasi jendela provider menjadi `% left`; untuk MiniMax, field persen remaining-only dibalik sebelum ditampilkan, dan respons `model_remains` lebih memilih entri chat-model plus label plan bertag model.
- **Baris token/cache** di `/status` dapat fallback ke entri usage transkrip terbaru saat snapshot sesi live jarang. Nilai live nonzero yang ada tetap diutamakan, dan fallback transkrip juga dapat memulihkan label model runtime aktif plus total berorientasi prompt yang lebih besar saat total tersimpan hilang atau lebih kecil.
- **Token/biaya per-respons** dikendalikan oleh `/usage off|tokens|full` (ditambahkan ke balasan normal).
- `/model status` membahas **models/auth/endpoints**, bukan usage.
- **Penggunaan/kuota provider** (contoh: “Claude 80% left”) muncul di `/status` untuk provider model saat ini ketika pelacakan penggunaan diaktifkan. OpenClaw menormalkan jendela provider menjadi `% left`; untuk MiniMax, field persentase hanya-sisa dibalik sebelum ditampilkan, dan respons `model_remains` mengutamakan entri model chat ditambah label paket bertag model.
- **Baris token/cache** di `/status` dapat fallback ke entri penggunaan transkrip terbaru ketika snapshot sesi live jarang. Nilai live nonnol yang ada tetap diutamakan, dan fallback transkrip juga dapat memulihkan label model runtime aktif ditambah total berorientasi prompt yang lebih besar saat total yang disimpan hilang atau lebih kecil.
- **Token/biaya per respons** dikontrol oleh `/usage off|tokens|full` (ditambahkan ke balasan normal).
- `/model status` membahas **model/auth/endpoint**, bukan penggunaan.
## Pemilihan model (`/model`)
`/model` diimplementasikan sebagai directive.
`/model` diimplementasikan sebagai sebuah direktif.
Contoh:
```text
```
/model
/model list
/model 3
@ -251,18 +253,18 @@ Contoh:
Catatan:
- `/model` dan `/model list` menampilkan pemilih ringkas bernomor (family model + provider yang tersedia).
- `/model` dan `/model list` menampilkan pemilih ringkas bernomor (keluarga model + provider yang tersedia).
- Di Discord, `/model` dan `/models` membuka pemilih interaktif dengan dropdown provider dan model plus langkah Submit.
- `/model <#>` memilih dari pemilih tersebut (dan lebih memilih provider saat ini bila memungkinkan).
- `/model status` menampilkan tampilan terperinci, termasuk endpoint provider terkonfigurasi (`baseUrl`) dan mode API (`api`) bila tersedia.
- `/model <#>` memilih dari pemilih tersebut (dan mengutamakan provider saat ini bila memungkinkan).
- `/model status` menampilkan tampilan detail, termasuk endpoint provider yang dikonfigurasi (`baseUrl`) dan mode API (`api`) bila tersedia.
## Override debug
`/debug` memungkinkan Anda menetapkan override config **hanya-runtime** (di memory, bukan disk). Khusus owner. Nonaktif secara default; aktifkan dengan `commands.debug: true`.
`/debug` memungkinkan Anda menetapkan override konfigurasi **hanya saat runtime** (memori, bukan disk). Khusus pemilik. Nonaktif secara default; aktifkan dengan `commands.debug: true`.
Contoh:
```text
```
/debug show
/debug set messages.responsePrefix="[openclaw]"
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
@ -272,12 +274,12 @@ Contoh:
Catatan:
- Override langsung berlaku untuk pembacaan config baru, tetapi **tidak** menulis ke `openclaw.json`.
- Gunakan `/debug reset` untuk menghapus semua override dan kembali ke config di disk.
- Override langsung diterapkan pada pembacaan konfigurasi baru, tetapi **tidak** menulis ke `openclaw.json`.
- Gunakan `/debug reset` untuk menghapus semua override dan kembali ke konfigurasi di disk.
## Output trace plugin
## Keluaran trace plugin
`/trace` memungkinkan Anda mengaktifkan atau menonaktifkan **baris trace/debug plugin berscope sesi** tanpa mengaktifkan mode verbose penuh.
`/trace` memungkinkan Anda mengaktifkan/menonaktifkan **baris trace/debug plugin yang tercakup sesi** tanpa mengaktifkan mode verbose penuh.
Contoh:
@ -293,16 +295,16 @@ Catatan:
- `/trace on` mengaktifkan baris trace plugin untuk sesi saat ini.
- `/trace off` menonaktifkannya kembali.
- Baris trace plugin dapat muncul di `/status` dan sebagai pesan diagnostik lanjutan setelah balasan asisten normal.
- `/trace` tidak menggantikan `/debug`; `/debug` tetap mengelola override config hanya-runtime.
- `/trace` tidak menggantikan `/verbose`; output tool/status verbose normal tetap milik `/verbose`.
- `/trace` tidak menggantikan `/debug`; `/debug` tetap mengelola override konfigurasi hanya saat runtime.
- `/trace` tidak menggantikan `/verbose`; keluaran alat/status verbose normal tetap menjadi ranah `/verbose`.
## Pembaruan config
## Pembaruan konfigurasi
`/config` menulis ke config di disk Anda (`openclaw.json`). Khusus owner. Nonaktif secara default; aktifkan dengan `commands.config: true`.
`/config` menulis ke konfigurasi di disk Anda (`openclaw.json`). Khusus pemilik. Nonaktif secara default; aktifkan dengan `commands.config: true`.
Contoh:
```text
```
/config show
/config show messages.responsePrefix
/config get messages.responsePrefix
@ -312,12 +314,12 @@ Contoh:
Catatan:
- Config divalidasi sebelum penulisan; perubahan yang tidak valid ditolak.
- Pembaruan `/config` bertahan setelah restart.
- Konfigurasi divalidasi sebelum ditulis; perubahan yang tidak valid akan ditolak.
- Pembaruan `/config` tetap bertahan setelah restart.
## Pembaruan MCP
`/mcp` menulis definisi server MCP yang dikelola OpenClaw di bawah `mcp.servers`. Khusus owner. Nonaktif secara default; aktifkan dengan `commands.mcp: true`.
`/mcp` menulis definisi server MCP yang dikelola OpenClaw di bawah `mcp.servers`. Khusus pemilik. Nonaktif secara default; aktifkan dengan `commands.mcp: true`.
Contoh:
@ -330,12 +332,12 @@ Contoh:
Catatan:
- `/mcp` menyimpan config di config OpenClaw, bukan pengaturan proyek milik Pi.
- `/mcp` menyimpan konfigurasi di konfigurasi OpenClaw, bukan pengaturan proyek milik Pi.
- Adapter runtime menentukan transport mana yang benar-benar dapat dieksekusi.
## Pembaruan plugin
`/plugins` memungkinkan operator memeriksa plugin yang ditemukan dan mengaktifkan/menonaktifkan enablement di config. Alur read-only dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`.
`/plugins` memungkinkan operator memeriksa plugin yang ditemukan dan mengaktifkan/menonaktifkan plugin di konfigurasi. Alur baca-saja dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`.
Contoh:
@ -349,20 +351,20 @@ Contoh:
Catatan:
- `/plugins list` dan `/plugins show` menggunakan penemuan plugin nyata terhadap workspace saat ini plus config di disk.
- `/plugins enable|disable` hanya memperbarui config plugin; tidak memasang atau menghapus plugin.
- `/plugins list` dan `/plugins show` menggunakan penemuan plugin nyata terhadap workspace saat ini plus konfigurasi di disk.
- `/plugins enable|disable` hanya memperbarui konfigurasi plugin; ini tidak menginstal atau menghapus instalasi plugin.
- Setelah perubahan enable/disable, restart gateway untuk menerapkannya.
## Catatan surface
## Catatan permukaan
- **Perintah teks** berjalan dalam sesi chat normal (DM berbagi `main`, grup memiliki sesi sendiri).
- **Perintah teks** berjalan di sesi chat normal (DM berbagi `main`, grup memiliki sesi sendiri).
- **Perintah native** menggunakan sesi terisolasi:
- Discord: `agent:<agentId>:discord:slash:<userId>`
- Slack: `agent:<agentId>:slack:slash:<userId>` (prefiks dapat dikonfigurasi melalui `channels.slack.slashCommand.sessionPrefix`)
- Slack: `agent:<agentId>:slack:slash:<userId>` (awalan dapat dikonfigurasi melalui `channels.slack.slashCommand.sessionPrefix`)
- Telegram: `telegram:slash:<userId>` (menargetkan sesi chat melalui `CommandTargetSessionKey`)
- **`/stop`** menargetkan sesi chat aktif sehingga dapat membatalkan run saat ini.
- **Slack:** `channels.slack.slashCommand` masih didukung untuk satu perintah bergaya `/openclaw`. Jika Anda mengaktifkan `commands.native`, Anda harus membuat satu slash command Slack per perintah built-in (nama sama seperti `/help`). Menu argumen perintah untuk Slack dikirim sebagai tombol Block Kit ephemeral.
- Pengecualian native Slack: daftarkan `/agentstatus` (bukan `/status`) karena Slack memesan `/status`. Teks `/status` tetap berfungsi di pesan Slack.
- **Slack:** `channels.slack.slashCommand` masih didukung untuk satu perintah gaya `/openclaw`. Jika Anda mengaktifkan `commands.native`, Anda harus membuat satu slash command Slack per perintah built-in (nama yang sama seperti `/help`). Menu argumen perintah untuk Slack dikirim sebagai tombol Block Kit ephemeral.
- Pengecualian native Slack: daftarkan `/agentstatus` (bukan `/status`) karena Slack mencadangkan `/status`. Teks `/status` tetap berfungsi dalam pesan Slack.
## Pertanyaan sampingan BTW
@ -370,13 +372,13 @@ Catatan:
Tidak seperti chat normal:
- perintah ini menggunakan sesi saat ini sebagai konteks latar belakang,
- perintah ini berjalan sebagai panggilan satu kali **tanpa tool** yang terpisah,
- perintah ini tidak mengubah konteks sesi di masa depan,
- perintah ini tidak ditulis ke riwayat transkrip,
- perintah ini dikirim sebagai hasil sampingan live alih-alih pesan asisten normal.
- ini menggunakan sesi saat ini sebagai konteks latar belakang,
- ini berjalan sebagai panggilan sekali pakai **tanpa alat** yang terpisah,
- ini tidak mengubah konteks sesi di masa mendatang,
- ini tidak ditulis ke riwayat transkrip,
- ini dikirim sebagai hasil sampingan live alih-alih sebagai pesan asisten normal.
Itu membuat `/btw` berguna saat Anda menginginkan klarifikasi sementara sementara
Hal ini membuat `/btw` berguna ketika Anda menginginkan klarifikasi sementara sementara
tugas utama tetap berjalan.
Contoh: