From f0de182db5d2fe2de682f9bc04459b268c108076 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Tue, 21 Apr 2026 17:48:23 +0000 Subject: [PATCH] chore(i18n): refresh id translations --- docs/id/channels/discord.md | 509 ++++++++++++++------------- docs/id/channels/slack.md | 239 ++++++------- docs/id/channels/telegram.md | 356 +++++++++---------- docs/id/gateway/multiple-gateways.md | 125 ++++--- docs/id/tools/slash-commands.md | 296 ++++++++-------- 5 files changed, 780 insertions(+), 745 deletions(-) diff --git a/docs/id/channels/discord.md b/docs/id/channels/discord.md index 0ace945f1..6bf1ce7f2 100644 --- a/docs/id/channels/discord.md +++ b/docs/id/channels/discord.md @@ -1,20 +1,20 @@ --- read_when: - - Sedang mengerjakan fitur saluran Discord -summary: Status dukungan bot Discord, kemampuan, dan konfigurasi + - Mengerjakan fitur channel Discord +summary: Status dukungan bot Discord, kapabilitas, dan konfigurasi title: Discord x-i18n: - generated_at: "2026-04-08T09:14:33Z" + generated_at: "2026-04-21T17:45:36Z" model: gpt-5.4 provider: openai - source_hash: 3cd2886fad941ae2129e681911309539e9a65a2352b777b538d7f4686a68f73f + source_hash: 1681315a6c246c4b68347f5e22319e132f30ea4e29a19e7d1da9e83dce7b68d0 source_path: channels/discord.md workflow: 15 --- # Discord (Bot API) -Status: siap untuk DM dan saluran guild melalui gateway Discord resmi. +Status: siap untuk DM dan channel guild melalui gateway Discord resmi. @@ -23,25 +23,25 @@ Status: siap untuk DM dan saluran guild melalui gateway Discord resmi. Perilaku perintah native dan katalog perintah. - - Diagnostik lintas saluran dan alur perbaikan. + + Diagnostik lintas-channel dan alur perbaikan. -## Penyiapan cepat +## Pengaturan cepat -Anda perlu membuat aplikasi baru dengan bot, menambahkan bot ke server Anda, lalu memasangkannya ke OpenClaw. Kami merekomendasikan menambahkan bot Anda ke server pribadi Anda sendiri. Jika Anda belum punya, [buat dulu](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (pilih **Create My Own > For me and my friends**). +Anda perlu membuat aplikasi baru dengan bot, menambahkan bot ke server Anda, lalu memasangkannya ke OpenClaw. Kami merekomendasikan menambahkan bot Anda ke server pribadi Anda sendiri. Jika Anda belum memilikinya, [buat dulu](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (pilih **Create My Own > For me and my friends**). - + Buka [Discord Developer Portal](https://discord.com/developers/applications) dan klik **New Application**. Beri nama seperti "OpenClaw". - Klik **Bot** di bilah sisi. Atur **Username** ke apa pun yang Anda gunakan untuk menyebut agen OpenClaw Anda. + Klik **Bot** pada sidebar. Atur **Username** ke nama yang Anda gunakan untuk agen OpenClaw Anda. - - Masih di halaman **Bot**, gulir ke bawah ke **Privileged Gateway Intents** lalu aktifkan: + + Masih di halaman **Bot**, gulir ke bawah ke **Privileged Gateway Intents** dan aktifkan: - **Message Content Intent** (wajib) - **Server Members Intent** (direkomendasikan; wajib untuk allowlist peran dan pencocokan nama-ke-ID) @@ -49,19 +49,19 @@ Anda perlu membuat aplikasi baru dengan bot, menambahkan bot ke server Anda, lal - - Gulir kembali ke atas di halaman **Bot** lalu klik **Reset Token**. + + Gulir kembali ke atas pada halaman **Bot** dan klik **Reset Token**. - Meskipun namanya begitu, ini menghasilkan token pertama Anda — tidak ada yang sedang "direset." + Meskipun namanya demikian, ini menghasilkan token pertama Anda — tidak ada yang sedang "direset." Salin token tersebut dan simpan di suatu tempat. Ini adalah **Bot Token** Anda dan Anda akan segera membutuhkannya. - - Klik **OAuth2** di bilah sisi. Anda akan membuat URL undangan dengan izin yang tepat untuk menambahkan bot ke server Anda. + + Klik **OAuth2** pada sidebar. Anda akan membuat URL undangan dengan izin yang tepat untuk menambahkan bot ke server Anda. Gulir ke bawah ke **OAuth2 URL Generator** dan aktifkan: @@ -77,30 +77,30 @@ Anda perlu membuat aplikasi baru dengan bot, menambahkan bot ke server Anda, lal - Attach Files - Add Reactions (opsional) - Salin URL yang dihasilkan di bagian bawah, tempelkan ke browser Anda, pilih server Anda, lalu klik **Continue** untuk menghubungkan. Anda sekarang seharusnya dapat melihat bot Anda di server Discord. + Salin URL yang dihasilkan di bagian bawah, tempelkan ke browser Anda, pilih server Anda, dan klik **Continue** untuk menghubungkan. Anda sekarang seharusnya dapat melihat bot Anda di server Discord. - + Kembali ke aplikasi Discord, Anda perlu mengaktifkan Developer Mode agar dapat menyalin ID internal. - 1. Klik **User Settings** (ikon roda gigi di samping avatar Anda) → **Advanced** → aktifkan **Developer Mode** - 2. Klik kanan **ikon server** Anda di bilah sisi → **Copy Server ID** + 1. Klik **User Settings** (ikon roda gigi di sebelah avatar Anda) → **Advanced** → aktifkan **Developer Mode** + 2. Klik kanan **ikon server** Anda di sidebar → **Copy Server ID** 3. Klik kanan **avatar Anda sendiri** → **Copy User ID** Simpan **Server ID** dan **User ID** Anda bersama Bot Token — Anda akan mengirim ketiganya ke OpenClaw pada langkah berikutnya. - - Agar pairing berfungsi, Discord perlu mengizinkan bot Anda mengirimi Anda DM. Klik kanan **ikon server** Anda → **Privacy Settings** → aktifkan **Direct Messages**. + + Agar pairing berfungsi, Discord perlu mengizinkan bot Anda mengirim DM kepada Anda. Klik kanan **ikon server** Anda → **Privacy Settings** → aktifkan **Direct Messages**. - Ini memungkinkan anggota server (termasuk bot) mengirimkan DM kepada Anda. Biarkan ini tetap aktif jika Anda ingin menggunakan DM Discord dengan OpenClaw. Jika Anda hanya berencana menggunakan saluran guild, Anda dapat menonaktifkan DM setelah pairing. + Ini memungkinkan anggota server (termasuk bot) mengirim DM kepada Anda. Biarkan ini tetap aktif jika Anda ingin menggunakan DM Discord dengan OpenClaw. Jika Anda hanya berencana menggunakan channel guild, Anda dapat menonaktifkan DM setelah pairing. - - Token bot Discord Anda adalah rahasia (seperti kata sandi). Setel token ini pada mesin yang menjalankan OpenClaw sebelum mengirim pesan ke agen Anda. + + Token bot Discord Anda adalah rahasia (seperti kata sandi). Atur token tersebut pada mesin yang menjalankan OpenClaw sebelum mengirim pesan ke agen Anda. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -110,20 +110,20 @@ openclaw config set channels.discord.enabled true --strict-json openclaw gateway ``` - Jika OpenClaw sudah berjalan sebagai layanan latar belakang, mulai ulang melalui aplikasi OpenClaw Mac atau dengan menghentikan lalu menjalankan kembali proses `openclaw gateway run`. + Jika OpenClaw sudah berjalan sebagai layanan latar belakang, mulai ulang melalui aplikasi OpenClaw Mac atau dengan menghentikan dan menjalankan ulang proses `openclaw gateway run`. - + - - Chat dengan agen OpenClaw Anda di saluran yang sudah ada (misalnya Telegram) lalu beri tahu. Jika Discord adalah saluran pertama Anda, gunakan tab CLI / config sebagai gantinya. + + Chat dengan agen OpenClaw Anda di channel lain yang sudah ada (misalnya Telegram) dan beri tahu. Jika Discord adalah channel pertama Anda, gunakan tab CLI / config sebagai gantinya. - > "Saya sudah menetapkan token bot Discord saya di config. Tolong selesaikan penyiapan Discord dengan User ID `` dan Server ID ``." + > "Saya sudah menetapkan token bot Discord saya di config. Tolong selesaikan pengaturan Discord dengan User ID `` dan Server ID ``." - Jika Anda lebih suka config berbasis file, tetapkan: + Jika Anda lebih suka config berbasis file, atur: ```json5 { @@ -153,12 +153,12 @@ DISCORD_BOT_TOKEN=... - - Tunggu sampai gateway berjalan, lalu kirim DM ke bot Anda di Discord. Bot akan merespons dengan kode pairing. + + Tunggu hingga gateway berjalan, lalu kirim DM ke bot Anda di Discord. Bot akan merespons dengan kode pairing. - - Kirim kode pairing ke agen Anda di saluran yang sudah ada: + + Kirim kode pairing ke agen Anda di channel Anda yang sudah ada: > "Setujui kode pairing Discord ini: ``" @@ -174,26 +174,26 @@ openclaw pairing approve discord Kode pairing kedaluwarsa setelah 1 jam. - Anda sekarang seharusnya dapat mengobrol dengan agen Anda di Discord melalui DM. + Anda sekarang seharusnya dapat chat dengan agen Anda di Discord melalui DM. -Resolusi token bersifat account-aware. Nilai token config lebih diprioritaskan daripada fallback env. `DISCORD_BOT_TOKEN` hanya digunakan untuk akun default. -Untuk panggilan outbound lanjutan (aksi alat pesan/saluran), `token` eksplisit per panggilan digunakan untuk panggilan tersebut. Ini berlaku untuk aksi bergaya kirim dan baca/probe (misalnya read/search/fetch/thread/pins/permissions). Pengaturan kebijakan/retry akun tetap berasal dari akun yang dipilih dalam snapshot runtime aktif. +Resolusi token memperhatikan akun. Nilai token pada config lebih diutamakan daripada fallback env. `DISCORD_BOT_TOKEN` hanya digunakan untuk akun default. +Untuk panggilan outbound lanjutan (aksi alat/channel pesan), `token` eksplisit per panggilan digunakan untuk panggilan tersebut. Ini berlaku untuk aksi kirim dan baca/probe-style (misalnya read/search/fetch/thread/pins/permissions). Pengaturan kebijakan akun/retry tetap berasal dari akun yang dipilih dalam snapshot runtime aktif. -## Rekomendasi: siapkan workspace guild +## Rekomendasi: Siapkan workspace guild -Setelah DM berfungsi, Anda dapat menyiapkan server Discord Anda sebagai workspace penuh di mana setiap saluran mendapatkan sesi agen sendiri dengan konteksnya sendiri. Ini direkomendasikan untuk server pribadi yang hanya berisi Anda dan bot Anda. +Setelah DM berfungsi, Anda dapat menyiapkan server Discord Anda sebagai workspace penuh di mana setiap channel mendapatkan sesi agen sendiri dengan konteksnya sendiri. Ini direkomendasikan untuk server pribadi yang hanya berisi Anda dan bot Anda. - - Ini memungkinkan agen Anda merespons di saluran mana pun di server Anda, bukan hanya DM. + + Ini memungkinkan agen Anda merespons di channel mana pun pada server Anda, bukan hanya DM. - + > "Tambahkan Server ID Discord saya `` ke guild allowlist" @@ -219,15 +219,15 @@ Setelah DM berfungsi, Anda dapat menyiapkan server Discord Anda sebagai workspac - - Secara default, agen Anda hanya merespons di saluran guild saat di-@mention. Untuk server pribadi, kemungkinan Anda ingin agen merespons setiap pesan. + + Secara default, agen Anda hanya merespons di channel guild saat di-@mention. Untuk server pribadi, Anda kemungkinan ingin agen merespons setiap pesan. - + > "Izinkan agen saya merespons di server ini tanpa harus di-@mention" - Tetapkan `requireMention: false` dalam config guild Anda: + Atur `requireMention: false` dalam config guild Anda: ```json5 { @@ -248,40 +248,40 @@ Setelah DM berfungsi, Anda dapat menyiapkan server Discord Anda sebagai workspac - - Secara default, memori jangka panjang (MEMORY.md) hanya dimuat dalam sesi DM. Saluran guild tidak otomatis memuat MEMORY.md. + + Secara default, memori jangka panjang (`MEMORY.md`) hanya dimuat dalam sesi DM. Channel guild tidak memuat `MEMORY.md` secara otomatis. - - > "Saat saya mengajukan pertanyaan di saluran Discord, gunakan memory_search atau memory_get jika Anda memerlukan konteks jangka panjang dari MEMORY.md." + + > "Saat saya mengajukan pertanyaan di channel Discord, gunakan memory_search atau memory_get jika Anda membutuhkan konteks jangka panjang dari `MEMORY.md`." - Jika Anda memerlukan konteks bersama di setiap saluran, letakkan instruksi stabil di `AGENTS.md` atau `USER.md` (keduanya disuntikkan untuk setiap sesi). Simpan catatan jangka panjang di `MEMORY.md` dan akses sesuai kebutuhan dengan alat memori. + Jika Anda memerlukan konteks bersama di setiap channel, letakkan instruksi stabil di `AGENTS.md` atau `USER.md` (keduanya disuntikkan ke setiap sesi). Simpan catatan jangka panjang di `MEMORY.md` dan akses saat diperlukan dengan alat memori. -Sekarang buat beberapa saluran di server Discord Anda dan mulai mengobrol. Agen Anda dapat melihat nama saluran, dan setiap saluran mendapatkan sesi terisolasi sendiri — jadi Anda dapat menyiapkan `#coding`, `#home`, `#research`, atau apa pun yang sesuai dengan alur kerja Anda. +Sekarang buat beberapa channel di server Discord Anda dan mulai chat. Agen Anda dapat melihat nama channel, dan setiap channel mendapatkan sesi terisolasi sendiri — sehingga Anda dapat menyiapkan `#coding`, `#home`, `#research`, atau apa pun yang sesuai dengan alur kerja Anda. ## Model runtime - Gateway memiliki koneksi Discord. - Perutean balasan bersifat deterministik: balasan masuk dari Discord dikembalikan ke Discord. - Secara default (`session.dmScope=main`), chat langsung berbagi sesi utama agen (`agent:main:main`). -- Saluran guild adalah kunci sesi terisolasi (`agent::discord:channel:`). +- Channel guild adalah key sesi terisolasi (`agent::discord:channel:`). - Group DM diabaikan secara default (`channels.discord.dm.groupEnabled=false`). -- Slash command native berjalan dalam sesi perintah terisolasi (`agent::discord:slash:`), sambil tetap membawa `CommandTargetSessionKey` ke sesi percakapan yang dirutekan. +- Slash commands native berjalan dalam sesi perintah terisolasi (`agent::discord:slash:`), sambil tetap membawa `CommandTargetSessionKey` ke sesi percakapan yang dirutekan. -## Saluran forum +## Channel forum -Saluran forum dan media Discord hanya menerima posting thread. OpenClaw mendukung dua cara untuk membuatnya: +Channel forum dan media Discord hanya menerima posting thread. OpenClaw mendukung dua cara untuk membuatnya: -- Kirim pesan ke induk forum (`channel:`) untuk membuat thread otomatis. Judul thread menggunakan baris pertama pesan Anda yang tidak kosong. -- Gunakan `openclaw message thread create` untuk membuat thread secara langsung. Jangan berikan `--message-id` untuk saluran forum. +- Kirim pesan ke parent forum (`channel:`) untuk membuat thread secara otomatis. Judul thread menggunakan baris pertama non-kosong dari pesan Anda. +- Gunakan `openclaw message thread create` untuk membuat thread secara langsung. Jangan berikan `--message-id` untuk channel forum. -Contoh: kirim ke induk forum untuk membuat thread +Contoh: kirim ke parent forum untuk membuat thread ```bash openclaw message send --channel discord --target channel: \ @@ -295,35 +295,35 @@ openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Induk forum tidak menerima komponen Discord. Jika Anda membutuhkan komponen, kirim ke thread itu sendiri (`channel:`). +Parent forum tidak menerima komponen Discord. Jika Anda memerlukan komponen, kirim ke thread itu sendiri (`channel:`). ## Komponen interaktif -OpenClaw mendukung container komponen v2 Discord untuk pesan agen. Gunakan alat pesan dengan payload `components`. Hasil interaksi dirutekan kembali ke agen sebagai pesan masuk biasa dan mengikuti pengaturan Discord `replyToMode` yang ada. +OpenClaw mendukung container komponen Discord v2 untuk pesan agen. Gunakan alat pesan dengan payload `components`. Hasil interaksi dirutekan kembali ke agen sebagai pesan masuk normal dan mengikuti pengaturan Discord `replyToMode` yang ada. Blok yang didukung: - `text`, `section`, `separator`, `actions`, `media-gallery`, `file` -- Baris aksi mengizinkan hingga 5 tombol atau satu menu pilih -- Tipe select: `string`, `user`, `role`, `mentionable`, `channel` +- Action row memungkinkan hingga 5 tombol atau satu menu pilihan +- Tipe pilihan: `string`, `user`, `role`, `mentionable`, `channel` -Secara default, komponen hanya dapat digunakan satu kali. Tetapkan `components.reusable=true` agar tombol, select, dan formulir dapat digunakan berkali-kali sampai kedaluwarsa. +Secara default, komponen hanya dapat digunakan sekali. Atur `components.reusable=true` untuk mengizinkan tombol, pilihan, dan formulir digunakan beberapa kali sampai kedaluwarsa. -Untuk membatasi siapa yang dapat mengeklik tombol, tetapkan `allowedUsers` pada tombol tersebut (ID pengguna Discord, tag, atau `*`). Jika dikonfigurasi, pengguna yang tidak cocok akan menerima penolakan ephemeral. +Untuk membatasi siapa yang dapat mengeklik tombol, atur `allowedUsers` pada tombol tersebut (Discord user ID, tag, atau `*`). Jika dikonfigurasi, pengguna yang tidak cocok akan menerima penolakan ephemeral. -Slash command `/model` dan `/models` membuka pemilih model interaktif dengan dropdown provider dan model serta langkah Submit. Balasan pemilih bersifat ephemeral dan hanya pengguna yang memanggilnya yang dapat menggunakannya. +Slash commands `/model` dan `/models` membuka pemilih model interaktif dengan dropdown provider dan model serta langkah Submit. Balasan pemilih bersifat ephemeral dan hanya pengguna pemanggil yang dapat menggunakannya. Lampiran file: -- blok `file` harus menunjuk ke referensi lampiran (`attachment://`) -- Berikan lampiran melalui `media`/`path`/`filePath` (satu file); gunakan `media-gallery` untuk beberapa file -- Gunakan `filename` untuk mengganti nama unggahan saat harus cocok dengan referensi lampiran +- Blok `file` harus mengarah ke referensi lampiran (`attachment://`) +- Sediakan lampiran melalui `media`/`path`/`filePath` (satu file); gunakan `media-gallery` untuk beberapa file +- Gunakan `filename` untuk mengganti nama upload ketika harus cocok dengan referensi lampiran Formulir modal: - Tambahkan `components.modal` dengan hingga 5 field - Tipe field: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` -- OpenClaw otomatis menambahkan tombol pemicu +- OpenClaw menambahkan tombol pemicu secara otomatis Contoh: @@ -332,45 +332,45 @@ Contoh: channel: "discord", action: "send", to: "channel:123456789012345678", - message: "Optional fallback text", + message: "Teks fallback opsional", components: { reusable: true, - text: "Choose a path", + text: "Pilih jalur", blocks: [ { type: "actions", buttons: [ { - label: "Approve", + label: "Setujui", style: "success", allowedUsers: ["123456789012345678"], }, - { label: "Decline", style: "danger" }, + { label: "Tolak", style: "danger" }, ], }, { type: "actions", select: { type: "string", - placeholder: "Pick an option", + placeholder: "Pilih opsi", options: [ - { label: "Option A", value: "a" }, - { label: "Option B", value: "b" }, + { label: "Opsi A", value: "a" }, + { label: "Opsi B", value: "b" }, ], }, }, ], modal: { - title: "Details", - triggerLabel: "Open form", + title: "Detail", + triggerLabel: "Buka formulir", fields: [ - { type: "text", label: "Requester" }, + { type: "text", label: "Peminta" }, { type: "select", - label: "Priority", + label: "Prioritas", options: [ - { label: "Low", value: "low" }, - { label: "High", value: "high" }, + { label: "Rendah", value: "low" }, + { label: "Tinggi", value: "high" }, ], }, ], @@ -382,20 +382,20 @@ Contoh: ## Kontrol akses dan perutean - + `channels.discord.dmPolicy` mengontrol akses DM (legacy: `channels.discord.dm.policy`): - `pairing` (default) - `allowlist` - - `open` (memerlukan `channels.discord.allowFrom` mencakup `"*"`; legacy: `channels.discord.dm.allowFrom`) + - `open` (memerlukan `channels.discord.allowFrom` menyertakan `"*"`; legacy: `channels.discord.dm.allowFrom`) - `disabled` - Jika kebijakan DM tidak open, pengguna yang tidak dikenal diblokir (atau diminta melakukan pairing dalam mode `pairing`). + Jika kebijakan DM tidak open, pengguna yang tidak dikenal diblokir (atau diminta pairing dalam mode `pairing`). Prioritas multi-akun: - `channels.discord.accounts.default.allowFrom` hanya berlaku untuk akun `default`. - - Akun bernama mewarisi `channels.discord.allowFrom` saat `allowFrom` mereka sendiri tidak ditetapkan. + - Akun bernama mewarisi `channels.discord.allowFrom` saat `allowFrom` miliknya sendiri belum disetel. - Akun bernama tidak mewarisi `channels.discord.accounts.default.allowFrom`. Format target DM untuk pengiriman: @@ -403,11 +403,11 @@ Contoh: - `user:` - mention `<@id>` - ID numerik polos bersifat ambigu dan ditolak kecuali jenis target user/channel eksplisit diberikan. + ID numerik polos ambigu dan ditolak kecuali jenis target user/channel eksplisit diberikan. - + Penanganan guild dikontrol oleh `channels.discord.groupPolicy`: - `open` @@ -419,11 +419,11 @@ Contoh: Perilaku `allowlist`: - guild harus cocok dengan `channels.discord.guilds` (`id` lebih disukai, slug diterima) - - allowlist pengirim opsional: `users` (ID stabil direkomendasikan) dan `roles` (hanya ID peran); jika salah satunya dikonfigurasi, pengirim diizinkan saat cocok dengan `users` ATAU `roles` + - allowlist pengirim opsional: `users` (ID stabil direkomendasikan) dan `roles` (hanya role ID); jika salah satunya dikonfigurasi, pengirim diizinkan saat cocok dengan `users` ATAU `roles` - pencocokan nama/tag langsung dinonaktifkan secara default; aktifkan `channels.discord.dangerouslyAllowNameMatching: true` hanya sebagai mode kompatibilitas darurat - nama/tag didukung untuk `users`, tetapi ID lebih aman; `openclaw security audit` memperingatkan saat entri nama/tag digunakan - - jika guild memiliki `channels` yang dikonfigurasi, saluran yang tidak tercantum akan ditolak - - jika guild tidak memiliki blok `channels`, semua saluran dalam guild yang di-allowlist diizinkan + - jika sebuah guild memiliki `channels` yang dikonfigurasi, channel yang tidak terdaftar akan ditolak + - jika sebuah guild tidak memiliki blok `channels`, semua channel dalam guild yang ada di allowlist diizinkan Contoh: @@ -449,12 +449,12 @@ Contoh: } ``` - Jika Anda hanya menetapkan `DISCORD_BOT_TOKEN` dan tidak membuat blok `channels.discord`, fallback runtime adalah `groupPolicy="allowlist"` (dengan peringatan di log), meskipun `channels.defaults.groupPolicy` adalah `open`. + Jika Anda hanya menyetel `DISCORD_BOT_TOKEN` dan tidak membuat blok `channels.discord`, fallback runtime adalah `groupPolicy="allowlist"` (dengan peringatan di log), meskipun `channels.defaults.groupPolicy` adalah `open`. - - Pesan guild secara default dibatasi mention. + + Pesan guild dibatasi mention secara default. Deteksi mention mencakup: @@ -462,20 +462,20 @@ Contoh: - pola mention yang dikonfigurasi (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`) - perilaku balas-ke-bot implisit dalam kasus yang didukung - `requireMention` dikonfigurasi per guild/saluran (`channels.discord.guilds...`). - `ignoreOtherMentions` secara opsional membuang pesan yang menyebut pengguna/peran lain tetapi bukan bot (tidak termasuk @everyone/@here). + `requireMention` dikonfigurasi per guild/channel (`channels.discord.guilds...`). + `ignoreOtherMentions` secara opsional membuang pesan yang menyebut user/role lain tetapi bukan bot (tidak termasuk @everyone/@here). Group DM: - default: diabaikan (`dm.groupEnabled=false`) - - allowlist opsional melalui `dm.groupChannels` (ID saluran atau slug) + - allowlist opsional melalui `dm.groupChannels` (ID channel atau slug) ### Perutean agen berbasis peran -Gunakan `bindings[].match.roles` untuk merutekan anggota guild Discord ke agen yang berbeda berdasarkan ID peran. Binding berbasis peran hanya menerima ID peran dan dievaluasi setelah binding peer atau parent-peer dan sebelum binding khusus guild. Jika suatu binding juga menetapkan field pencocokan lain (misalnya `peer` + `guildId` + `roles`), semua field yang dikonfigurasi harus cocok. +Gunakan `bindings[].match.roles` untuk merutekan anggota guild Discord ke agen yang berbeda berdasarkan role ID. Binding berbasis peran hanya menerima role ID dan dievaluasi setelah binding peer atau parent-peer dan sebelum binding khusus guild. Jika sebuah binding juga menetapkan field pencocokan lain (misalnya `peer` + `guildId` + `roles`), semua field yang dikonfigurasi harus cocok. ```json5 { @@ -499,10 +499,10 @@ Gunakan `bindings[].match.roles` untuk merutekan anggota guild Discord ke agen y } ``` -## Penyiapan Developer Portal +## Pengaturan Developer Portal - + 1. Discord Developer Portal -> **Applications** -> **New Application** 2. **Bot** -> **Add Bot** @@ -510,20 +510,20 @@ Gunakan `bindings[].match.roles` untuk merutekan anggota guild Discord ke agen y - + Di **Bot -> Privileged Gateway Intents**, aktifkan: - Message Content Intent - Server Members Intent (direkomendasikan) - Presence intent bersifat opsional dan hanya diperlukan jika Anda ingin menerima pembaruan presence. Menetapkan presence bot (`setPresence`) tidak memerlukan pembaruan presence untuk anggota diaktifkan. + Presence intent bersifat opsional dan hanya diperlukan jika Anda ingin menerima pembaruan presence. Menyetel presence bot (`setPresence`) tidak memerlukan pembaruan presence untuk anggota diaktifkan. - + Generator URL OAuth: - - scopes: `bot`, `applications.commands` + - scope: `bot`, `applications.commands` Izin baseline yang umum: @@ -534,29 +534,29 @@ Gunakan `bindings[].match.roles` untuk merutekan anggota guild Discord ke agen y - Attach Files - Add Reactions (opsional) - Hindari `Administrator` kecuali benar-benar diperlukan. + Hindari `Administrator` kecuali memang diperlukan secara eksplisit. - + Aktifkan Discord Developer Mode, lalu salin: - - ID server - - ID saluran - - ID pengguna + - server ID + - channel ID + - user ID - Lebih pilih ID numerik dalam config OpenClaw untuk audit dan probe yang andal. + Gunakan ID numerik dalam config OpenClaw untuk audit dan probe yang andal. -## Perintah native dan autentikasi perintah +## Perintah native dan auth perintah -- `commands.native` secara default bernilai `"auto"` dan diaktifkan untuk Discord. -- Override per saluran: `channels.discord.commands.native`. +- `commands.native` default ke `"auto"` dan diaktifkan untuk Discord. +- Override per channel: `channels.discord.commands.native`. - `commands.native=false` secara eksplisit menghapus perintah native Discord yang sebelumnya terdaftar. -- Autentikasi perintah native menggunakan allowlist/kebijakan Discord yang sama seperti penanganan pesan biasa. -- Perintah mungkin tetap terlihat di UI Discord bagi pengguna yang tidak berwenang; eksekusi tetap menerapkan autentikasi OpenClaw dan mengembalikan "not authorized". +- Auth perintah native menggunakan allowlist/kebijakan Discord yang sama dengan penanganan pesan normal. +- Perintah mungkin tetap terlihat di UI Discord bagi pengguna yang tidak berwenang; eksekusi tetap menerapkan auth OpenClaw dan mengembalikan "not authorized". Lihat [Slash commands](/id/tools/slash-commands) untuk katalog dan perilaku perintah. @@ -567,7 +567,7 @@ Pengaturan slash command default: ## Detail fitur - + Discord mendukung tag balasan dalam output agen: - `[[reply_to_current]]` @@ -581,25 +581,26 @@ Pengaturan slash command default: - `batched` Catatan: `off` menonaktifkan threading balasan implisit. Tag `[[reply_to_*]]` eksplisit tetap dihormati. - `first` selalu melampirkan referensi balasan native implisit ke pesan Discord keluar pertama untuk giliran tersebut. + `first` selalu melampirkan referensi balasan native implisit ke pesan Discord outbound pertama untuk giliran tersebut. `batched` hanya melampirkan referensi balasan native implisit Discord ketika - giliran masuk adalah batch terdebounce dari beberapa pesan. Ini berguna - ketika Anda menginginkan balasan native terutama untuk chat yang ambigu dan ramai, bukan untuk setiap - giliran satu pesan. + giliran masuk adalah batch ter-debounce dari beberapa pesan. Ini berguna + ketika Anda menginginkan balasan native terutama untuk chat ambigu yang ramai, bukan setiap + giliran pesan tunggal. - ID pesan dimunculkan dalam konteks/riwayat sehingga agen dapat menargetkan pesan tertentu. + ID pesan ditampilkan dalam konteks/riwayat sehingga agen dapat menargetkan pesan tertentu. - - OpenClaw dapat melakukan streaming draf balasan dengan mengirim pesan sementara dan mengeditnya saat teks tiba. + + OpenClaw dapat melakukan streaming draf balasan dengan mengirim pesan sementara dan mengeditnya saat teks masuk. - `channels.discord.streaming` mengontrol streaming pratinjau (`off` | `partial` | `block` | `progress`, default: `off`). - - Default tetap `off` karena edit pratinjau Discord dapat dengan cepat terkena batas laju, terutama ketika beberapa bot atau gateway berbagi akun atau lalu lintas guild yang sama. - - `progress` diterima untuk konsistensi lintas saluran dan dipetakan ke `partial` di Discord. - - `channels.discord.streamMode` adalah alias legacy dan dimigrasikan otomatis. - - `partial` mengedit satu pesan pratinjau saat token tiba. - - `block` mengeluarkan potongan seukuran draf (gunakan `draftChunk` untuk menyesuaikan ukuran dan breakpoint). + - Default tetap `off` karena edit pratinjau Discord dapat cepat mencapai rate limit, terutama saat beberapa bot atau gateway berbagi akun atau lalu lintas guild yang sama. + - `progress` diterima untuk konsistensi lintas-channel dan dipetakan ke `partial` di Discord. + - `channels.discord.streamMode` adalah alias legacy dan dimigrasikan secara otomatis. + - `partial` mengedit satu pesan pratinjau saat token masuk. + - `block` mengeluarkan chunk seukuran draf (gunakan `draftChunk` untuk menyesuaikan ukuran dan breakpoint). + - `streaming.preview.toolProgress` mengontrol apakah pembaruan alat/progres menggunakan kembali pesan pratinjau draf yang sama (default: `true`). Setel `false` untuk mempertahankan pesan alat/progres yang terpisah. Contoh: @@ -613,7 +614,7 @@ Pengaturan slash command default: } ``` - Default potongan mode `block` (dibatasi ke `channels.discord.textChunkLimit`): + Default chunking mode `block` (dibatasi ke `channels.discord.textChunkLimit`): ```json5 { @@ -633,11 +634,11 @@ Pengaturan slash command default: Streaming pratinjau hanya untuk teks; balasan media kembali ke pengiriman normal. Catatan: streaming pratinjau terpisah dari block streaming. Saat block streaming secara eksplisit - diaktifkan untuk Discord, OpenClaw melewati stream pratinjau untuk menghindari streaming ganda. + diaktifkan untuk Discord, OpenClaw melewati aliran pratinjau untuk menghindari streaming ganda. - + Konteks riwayat guild: - `channels.discord.historyLimit` default `20` @@ -651,26 +652,26 @@ Pengaturan slash command default: Perilaku thread: - - Thread Discord dirutekan sebagai sesi saluran - - metadata thread induk dapat digunakan untuk keterkaitan sesi induk - - config thread mewarisi config saluran induk kecuali ada entri khusus thread + - thread Discord dirutekan sebagai sesi channel + - metadata thread parent dapat digunakan untuk tautan parent-session + - config thread mewarisi config channel parent kecuali ada entri khusus thread - Topik saluran disuntikkan sebagai konteks **tidak tepercaya** (bukan sebagai system prompt). - Konteks balasan dan pesan yang dikutip saat ini tetap sebagaimana diterima. - Allowlist Discord terutama membatasi siapa yang dapat memicu agen, bukan batas penyuntingan konteks tambahan yang sepenuhnya lengkap. + Topik channel disuntikkan sebagai konteks **tidak tepercaya** (bukan sebagai system prompt). + Konteks balasan dan pesan kutipan saat ini tetap seperti yang diterima. + Allowlist Discord terutama membatasi siapa yang dapat memicu agen, bukan batas penyuntingan konteks tambahan yang lengkap. - - Discord dapat mengikat thread ke target sesi sehingga pesan tindak lanjut di thread tersebut tetap dirutekan ke sesi yang sama (termasuk sesi subagen). + + Discord dapat mengikat sebuah thread ke target sesi sehingga pesan lanjutan dalam thread tersebut tetap dirutekan ke sesi yang sama (termasuk sesi subagent). Perintah: - - `/focus ` mengikat thread saat ini/baru ke target subagen/sesi - - `/unfocus` menghapus binding thread saat ini - - `/agents` menampilkan run aktif dan status binding - - `/session idle ` memeriksa/memperbarui auto-unfocus karena tidak aktif untuk binding yang difokuskan - - `/session max-age ` memeriksa/memperbarui usia maksimum keras untuk binding yang difokuskan + - `/focus ` ikat thread saat ini/baru ke target subagent/sesi + - `/unfocus` hapus binding thread saat ini + - `/agents` tampilkan run aktif dan status binding + - `/session idle ` periksa/perbarui auto-unfocus karena tidak aktif untuk binding yang difokuskan + - `/session max-age ` periksa/perbarui usia maksimum keras untuk binding yang difokuskan Config: @@ -699,17 +700,17 @@ Pengaturan slash command default: Catatan: - `session.threadBindings.*` menetapkan default global. - - `channels.discord.threadBindings.*` menggantikan perilaku Discord. - - `spawnSubagentSessions` harus bernilai true untuk membuat/mengikat thread otomatis bagi `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` harus bernilai true untuk membuat/mengikat thread otomatis bagi ACP (`/acp spawn ... --thread ...` atau `sessions_spawn({ runtime: "acp", thread: true })`). + - `channels.discord.threadBindings.*` meng-override perilaku Discord. + - `spawnSubagentSessions` harus bernilai true untuk membuat/mengikat thread secara otomatis bagi `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` harus bernilai true untuk membuat/mengikat thread secara otomatis bagi ACP (`/acp spawn ... --thread ...` atau `sessions_spawn({ runtime: "acp", thread: true })`). - Jika thread binding dinonaktifkan untuk suatu akun, `/focus` dan operasi thread binding terkait tidak tersedia. Lihat [Sub-agents](/id/tools/subagents), [ACP Agents](/id/tools/acp-agents), dan [Configuration Reference](/id/gateway/configuration-reference). - - Untuk workspace ACP yang stabil dan "selalu aktif", konfigurasikan binding ACP bertipe tingkat atas yang menargetkan percakapan Discord. + + Untuk workspace ACP "selalu aktif" yang stabil, konfigurasikan binding ACP bertipe tingkat atas yang menargetkan percakapan Discord. Jalur config: @@ -765,19 +766,19 @@ Pengaturan slash command default: Catatan: - - `/acp spawn codex --bind here` mengikat saluran atau thread Discord saat ini di tempat dan menjaga agar pesan mendatang tetap dirutekan ke sesi ACP yang sama. - - Itu masih dapat berarti "memulai sesi ACP Codex baru", tetapi tidak dengan sendirinya membuat thread Discord baru. Saluran yang ada tetap menjadi permukaan chat. - - Codex mungkin tetap berjalan dalam `cwd` atau workspace backend tersendiri di disk. Workspace itu adalah state runtime, bukan thread Discord. - - Pesan thread dapat mewarisi binding ACP saluran induk. - - Dalam saluran atau thread yang terikat, `/new` dan `/reset` mereset sesi ACP yang sama di tempat. - - Thread binding sementara tetap berfungsi dan dapat menggantikan resolusi target saat aktif. - - `spawnAcpSessions` hanya diperlukan ketika OpenClaw perlu membuat/mengikat thread anak melalui `--thread auto|here`. Ini tidak diperlukan untuk `/acp spawn ... --bind here` di saluran saat ini. + - `/acp spawn codex --bind here` mengikat channel atau thread Discord saat ini di tempat dan mempertahankan perutean pesan berikutnya ke sesi ACP yang sama. + - Itu masih bisa berarti "memulai sesi Codex ACP yang baru", tetapi tidak membuat thread Discord baru dengan sendirinya. Channel yang ada tetap menjadi permukaan chat. + - Codex tetap dapat berjalan di `cwd`-nya sendiri atau workspace backend di disk. Workspace tersebut adalah status runtime, bukan thread Discord. + - Pesan thread dapat mewarisi binding ACP channel parent. + - Dalam channel atau thread yang terikat, `/new` dan `/reset` mereset sesi ACP yang sama di tempat. + - Thread binding sementara tetap berfungsi dan dapat meng-override resolusi target saat aktif. + - `spawnAcpSessions` hanya diperlukan ketika OpenClaw perlu membuat/mengikat thread turunan melalui `--thread auto|here`. Ini tidak diperlukan untuk `/acp spawn ... --bind here` di channel saat ini. Lihat [ACP Agents](/id/tools/acp-agents) untuk detail perilaku binding. - + Mode notifikasi reaksi per guild: - `off` @@ -785,12 +786,12 @@ Pengaturan slash command default: - `all` - `allowlist` (menggunakan `guilds..users`) - Event reaksi diubah menjadi system event dan dilampirkan ke sesi Discord yang dirutekan. + Event reaksi diubah menjadi event sistem dan dilampirkan ke sesi Discord yang dirutekan. - - `ackReaction` mengirim emoji pengakuan saat OpenClaw sedang memproses pesan masuk. + + `ackReaction` mengirim emoji tanda terima saat OpenClaw sedang memproses pesan masuk. Urutan resolusi: @@ -802,12 +803,12 @@ Pengaturan slash command default: Catatan: - Discord menerima emoji unicode atau nama emoji kustom. - - Gunakan `""` untuk menonaktifkan reaksi untuk saluran atau akun. + - Gunakan `""` untuk menonaktifkan reaksi untuk channel atau akun. - - Penulisan config yang dimulai dari saluran diaktifkan secara default. + + Penulisan config yang dipicu channel diaktifkan secara default. Ini memengaruhi alur `/config set|unset` (saat fitur perintah diaktifkan). @@ -825,7 +826,7 @@ Pengaturan slash command default: - + Rutekan lalu lintas WebSocket gateway Discord dan lookup REST saat startup (ID aplikasi + resolusi allowlist) melalui proxy HTTP(S) dengan `channels.discord.proxy`. ```json5 @@ -856,7 +857,7 @@ Pengaturan slash command default: - + Aktifkan resolusi PluralKit untuk memetakan pesan yang diproksikan ke identitas anggota sistem: ```json5 @@ -881,10 +882,10 @@ Pengaturan slash command default: - - Pembaruan presence diterapkan ketika Anda menetapkan field status atau activity, atau saat Anda mengaktifkan auto presence. + + Pembaruan presence diterapkan saat Anda menetapkan field status atau activity, atau saat Anda mengaktifkan auto presence. - Contoh hanya status: + Contoh status saja: ```json5 { @@ -902,7 +903,7 @@ Pengaturan slash command default: { channels: { discord: { - activity: "Focus time", + activity: "Waktu fokus", activityType: 4, }, }, @@ -915,7 +916,7 @@ Pengaturan slash command default: { channels: { discord: { - activity: "Live coding", + activity: "Coding langsung", activityType: 1, activityUrl: "https://twitch.tv/openclaw", }, @@ -942,14 +943,14 @@ Pengaturan slash command default: enabled: true, intervalMs: 30000, minUpdateIntervalMs: 15000, - exhaustedText: "token exhausted", + exhaustedText: "token habis", }, }, }, } ``` - Auto presence memetakan ketersediaan runtime ke status Discord: sehat => online, terdegradasi atau tidak diketahui => idle, habis atau tidak tersedia => dnd. Override teks opsional: + Auto presence memetakan ketersediaan runtime ke status Discord: healthy => online, degraded atau unknown => idle, exhausted atau unavailable => dnd. Override teks opsional: - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -957,8 +958,8 @@ Pengaturan slash command default: - - Discord mendukung penanganan persetujuan berbasis tombol di DM dan secara opsional dapat memposting prompt persetujuan di saluran asal. + + Discord mendukung penanganan approval berbasis tombol di DM dan secara opsional dapat memposting prompt approval di channel asal. Jalur config: @@ -967,69 +968,69 @@ Pengaturan slash command default: - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord otomatis mengaktifkan persetujuan exec native ketika `enabled` tidak ditetapkan atau `"auto"` dan setidaknya satu approver dapat diresolusikan, baik dari `execApprovals.approvers` atau dari `commands.ownerAllowFrom`. Discord tidak menyimpulkan approver exec dari `allowFrom` saluran, `dm.allowFrom` legacy, atau `defaultTo` direct-message. Tetapkan `enabled: false` untuk menonaktifkan Discord sebagai klien persetujuan native secara eksplisit. + Discord secara otomatis mengaktifkan exec approval native saat `enabled` tidak disetel atau `"auto"` dan setidaknya satu approver dapat diresolusikan, baik dari `execApprovals.approvers` maupun dari `commands.ownerAllowFrom`. Discord tidak menyimpulkan exec approver dari `allowFrom` channel, `dm.allowFrom` legacy, atau `defaultTo` direct-message. Setel `enabled: false` untuk menonaktifkan Discord sebagai klien approval native secara eksplisit. - Saat `target` adalah `channel` atau `both`, prompt persetujuan terlihat di saluran. Hanya approver yang dapat diresolusikan yang dapat menggunakan tombol; pengguna lain menerima penolakan ephemeral. Prompt persetujuan menyertakan teks perintah, jadi hanya aktifkan pengiriman saluran di saluran tepercaya. Jika ID saluran tidak dapat diturunkan dari session key, OpenClaw kembali ke pengiriman DM. + Saat `target` adalah `channel` atau `both`, prompt approval terlihat di channel. Hanya approver yang berhasil diresolusikan yang dapat menggunakan tombol; pengguna lain menerima penolakan ephemeral. Prompt approval menyertakan teks perintah, jadi aktifkan pengiriman ke channel hanya di channel tepercaya. Jika ID channel tidak dapat diturunkan dari session key, OpenClaw fallback ke pengiriman DM. - Discord juga merender tombol persetujuan bersama yang digunakan oleh saluran chat lain. Adapter Discord native terutama menambahkan perutean DM approver dan fanout saluran. - Saat tombol-tombol itu ada, tombol tersebut adalah UX persetujuan utama; OpenClaw - hanya seharusnya menyertakan perintah `/approve` manual ketika hasil alat menyatakan - persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur. + Discord juga merender tombol approval bersama yang digunakan oleh channel chat lain. Adapter Discord native terutama menambahkan perutean DM approver dan fanout channel. + Saat tombol tersebut ada, tombol itu menjadi UX approval utama; OpenClaw + seharusnya hanya menyertakan perintah manual `/approve` saat hasil tool mengatakan + approval chat tidak tersedia atau approval manual adalah satu-satunya jalur. - Autentikasi gateway untuk handler ini menggunakan kontrak resolusi kredensial bersama yang sama seperti klien Gateway lainnya: + Auth Gateway untuk handler ini menggunakan kontrak resolusi kredensial bersama yang sama seperti klien Gateway lain: - - autentikasi lokal env-first (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` lalu `gateway.auth.*`) - - dalam mode lokal, `gateway.remote.*` dapat digunakan sebagai fallback hanya ketika `gateway.auth.*` tidak ditetapkan; SecretRef lokal yang dikonfigurasi namun tidak dapat diresolusikan gagal secara tertutup - - dukungan mode remote melalui `gateway.remote.*` bila berlaku + - auth lokal yang mendahulukan env (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` lalu `gateway.auth.*`) + - dalam mode lokal, `gateway.remote.*` dapat digunakan sebagai fallback hanya ketika `gateway.auth.*` tidak disetel; SecretRef lokal yang dikonfigurasi tetapi tidak dapat diresolusikan gagal tertutup + - dukungan mode remote melalui `gateway.remote.*` saat berlaku - override URL aman terhadap override: override CLI tidak menggunakan ulang kredensial implisit, dan override env hanya menggunakan kredensial env - Perilaku resolusi persetujuan: + Perilaku resolusi approval: - ID yang diawali `plugin:` diresolusikan melalui `plugin.approval.resolve`. - - ID lainnya diresolusikan melalui `exec.approval.resolve`. - - Discord tidak melakukan lompatan fallback exec-ke-plugin tambahan di sini; prefiks + - ID lain diresolusikan melalui `exec.approval.resolve`. + - Discord tidak melakukan hop fallback exec-ke-plugin tambahan di sini; prefiks id menentukan metode gateway mana yang dipanggil. - Persetujuan exec kedaluwarsa setelah 30 menit secara default. Jika persetujuan gagal dengan - ID persetujuan yang tidak dikenal, verifikasi resolusi approver, pengaktifan fitur, dan - bahwa jenis id persetujuan yang dikirim cocok dengan permintaan yang tertunda. + Exec approval kedaluwarsa setelah 30 menit secara default. Jika approval gagal dengan + ID approval yang tidak dikenal, verifikasi resolusi approver, pengaktifan fitur, dan + bahwa jenis approval id yang dikirim cocok dengan permintaan yang tertunda. Dokumen terkait: [Exec approvals](/id/tools/exec-approvals) -## Alat dan gerbang aksi +## Tools dan gate aksi -Aksi pesan Discord mencakup pesan, administrasi saluran, moderasi, presence, dan aksi metadata. +Aksi pesan Discord mencakup pengiriman pesan, admin channel, moderasi, presence, dan aksi metadata. Contoh inti: -- pesan: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` +- pengiriman pesan: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` - reaksi: `react`, `reactions`, `emojiList` - moderasi: `timeout`, `kick`, `ban` - presence: `setPresence` -Aksi `event-create` menerima parameter `image` opsional (URL atau path file lokal) untuk menetapkan gambar sampul event terjadwal. +Aksi `event-create` menerima parameter `image` opsional (URL atau jalur file lokal) untuk menetapkan gambar sampul event terjadwal. -Gerbang aksi berada di bawah `channels.discord.actions.*`. +Gate aksi berada di bawah `channels.discord.actions.*`. -Perilaku gerbang default: +Perilaku gate default: -| Kelompok aksi | Default | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | -| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | enabled | -| roles | disabled | -| moderation | disabled | -| presence | disabled | +| Grup aksi | Default | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | +| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | enabled | +| roles | disabled | +| moderation | disabled | +| presence | disabled | -## UI komponen v2 +## UI Components v2 -OpenClaw menggunakan komponen v2 Discord untuk persetujuan exec dan penanda lintas konteks. Aksi pesan Discord juga dapat menerima `components` untuk UI kustom (lanjutan; memerlukan pembuatan payload komponen melalui alat discord), sementara `embeds` legacy tetap tersedia tetapi tidak direkomendasikan. +OpenClaw menggunakan Discord components v2 untuk exec approval dan penanda lintas-konteks. Aksi pesan Discord juga dapat menerima `components` untuk UI kustom (lanjutan; memerlukan penyusunan payload komponen melalui tool discord), sementara `embeds` legacy tetap tersedia tetapi tidak direkomendasikan. - `channels.discord.ui.components.accentColor` menetapkan warna aksen yang digunakan oleh container komponen Discord (hex). -- Tetapkan per akun dengan `channels.discord.accounts..ui.components.accentColor`. -- `embeds` diabaikan ketika komponen v2 ada. +- Setel per akun dengan `channels.discord.accounts..ui.components.accentColor`. +- `embeds` diabaikan saat components v2 hadir. Contoh: @@ -1047,15 +1048,15 @@ Contoh: } ``` -## Saluran suara +## Voice channels -OpenClaw dapat bergabung ke saluran suara Discord untuk percakapan realtime yang berkelanjutan. Ini terpisah dari lampiran pesan suara. +OpenClaw dapat bergabung ke voice channel Discord untuk percakapan realtime dan berkelanjutan. Ini terpisah dari lampiran pesan suara. Persyaratan: - Aktifkan perintah native (`commands.native` atau `channels.discord.commands.native`). - Konfigurasikan `channels.discord.voice`. -- Bot memerlukan izin Connect + Speak di saluran suara target. +- Bot memerlukan izin Connect + Speak di voice channel target. Gunakan perintah native khusus Discord `/vc join|leave|status` untuk mengontrol sesi. Perintah ini menggunakan agen default akun dan mengikuti aturan allowlist dan group policy yang sama seperti perintah Discord lainnya. @@ -1087,21 +1088,21 @@ Contoh auto-join: Catatan: -- `voice.tts` menggantikan `messages.tts` hanya untuk pemutaran suara. -- Giliran transkrip suara menurunkan status owner dari Discord `allowFrom` (atau `dm.allowFrom`); pembicara non-owner tidak dapat mengakses alat khusus owner (misalnya `gateway` dan `cron`). -- Voice diaktifkan secara default; tetapkan `channels.discord.voice.enabled=false` untuk menonaktifkannya. +- `voice.tts` meng-override `messages.tts` hanya untuk pemutaran suara. +- Giliran transkrip suara menurunkan status owner dari Discord `allowFrom` (atau `dm.allowFrom`); pembicara non-owner tidak dapat mengakses tool khusus owner (misalnya `gateway` dan `cron`). +- Voice diaktifkan secara default; setel `channels.discord.voice.enabled=false` untuk menonaktifkannya. - `voice.daveEncryption` dan `voice.decryptionFailureTolerance` diteruskan ke opsi join `@discordjs/voice`. -- Default `@discordjs/voice` adalah `daveEncryption=true` dan `decryptionFailureTolerance=24` jika tidak ditetapkan. -- OpenClaw juga memantau kegagalan dekripsi saat menerima dan melakukan pemulihan otomatis dengan keluar/bergabung ulang ke saluran suara setelah kegagalan berulang dalam jangka waktu singkat. +- Default `@discordjs/voice` adalah `daveEncryption=true` dan `decryptionFailureTolerance=24` jika tidak disetel. +- OpenClaw juga memantau kegagalan dekripsi saat menerima dan memulihkan secara otomatis dengan keluar/bergabung ulang ke voice channel setelah kegagalan berulang dalam jendela waktu singkat. - Jika log penerimaan berulang kali menampilkan `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, ini mungkin bug penerimaan upstream `@discordjs/voice` yang dilacak di [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). ## Pesan suara -Pesan suara Discord menampilkan pratinjau waveform dan memerlukan audio OGG/Opus beserta metadata. OpenClaw menghasilkan waveform secara otomatis, tetapi memerlukan `ffmpeg` dan `ffprobe` tersedia di host gateway untuk memeriksa dan mengonversi file audio. +Pesan suara Discord menampilkan pratinjau waveform dan memerlukan audio OGG/Opus plus metadata. OpenClaw menghasilkan waveform secara otomatis, tetapi memerlukan `ffmpeg` dan `ffprobe` tersedia di host gateway untuk memeriksa dan mengonversi file audio. Persyaratan dan batasan: -- Berikan **path file lokal** (URL ditolak). +- Berikan **jalur file lokal** (URL ditolak). - Hilangkan konten teks (Discord tidak mengizinkan teks + pesan suara dalam payload yang sama). - Format audio apa pun diterima; OpenClaw mengonversi ke OGG/Opus bila diperlukan. @@ -1114,19 +1115,19 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Pemecahan masalah - + - aktifkan Message Content Intent - - aktifkan Server Members Intent saat Anda bergantung pada resolusi pengguna/anggota - - mulai ulang gateway setelah mengubah intent + - aktifkan Server Members Intent saat Anda bergantung pada resolusi user/member + - restart gateway setelah mengubah intents - + - verifikasi `groupPolicy` - verifikasi guild allowlist di bawah `channels.discord.guilds` - - jika peta `channels` guild ada, hanya saluran yang tercantum yang diizinkan + - jika map `channels` guild ada, hanya channel yang terdaftar yang diizinkan - verifikasi perilaku `requireMention` dan pola mention Pemeriksaan yang berguna: @@ -1139,33 +1140,33 @@ openclaw logs --follow - + Penyebab umum: - - `groupPolicy="allowlist"` tanpa guild/channel allowlist yang cocok - - `requireMention` dikonfigurasi di tempat yang salah (harus di bawah `channels.discord.guilds` atau entri saluran) + - `groupPolicy="allowlist"` tanpa allowlist guild/channel yang cocok + - `requireMention` dikonfigurasi di tempat yang salah (harus di bawah `channels.discord.guilds` atau entri channel) - pengirim diblokir oleh allowlist `users` guild/channel - + - Log yang umum: + Log umum: - `Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATE` - `Slow listener detected ...` - `discord inbound worker timed out after ...` - Pengaturan anggaran listener: + Knob anggaran listener: - akun tunggal: `channels.discord.eventQueue.listenerTimeout` - multi-akun: `channels.discord.accounts..eventQueue.listenerTimeout` - Pengaturan timeout run worker: + Knob timeout run worker: - akun tunggal: `channels.discord.inboundWorker.runTimeoutMs` - multi-akun: `channels.discord.accounts..inboundWorker.runTimeoutMs` - - default: `1800000` (30 menit); tetapkan `0` untuk menonaktifkan + - default: `1800000` (30 menit); setel `0` untuk menonaktifkan Baseline yang direkomendasikan: @@ -1188,19 +1189,19 @@ openclaw logs --follow } ``` - Gunakan `eventQueue.listenerTimeout` untuk penyiapan listener yang lambat dan `inboundWorker.runTimeoutMs` + Gunakan `eventQueue.listenerTimeout` untuk setup listener yang lambat dan `inboundWorker.runTimeoutMs` hanya jika Anda menginginkan katup pengaman terpisah untuk giliran agen yang masuk ke antrean. - - Pemeriksaan izin `channels status --probe` hanya berfungsi untuk ID saluran numerik. + + Pemeriksaan izin `channels status --probe` hanya berfungsi untuk ID channel numerik. - Jika Anda menggunakan kunci slug, pencocokan runtime masih dapat berfungsi, tetapi probe tidak dapat sepenuhnya memverifikasi izin. + Jika Anda menggunakan key slug, pencocokan runtime masih dapat berfungsi, tetapi probe tidak dapat memverifikasi izin sepenuhnya. - + - DM dinonaktifkan: `channels.discord.dm.enabled=false` - kebijakan DM dinonaktifkan: `channels.discord.dmPolicy="disabled"` (legacy: `channels.discord.dm.policy`) @@ -1208,23 +1209,23 @@ openclaw logs --follow - - Secara default pesan yang ditulis bot diabaikan. + + Secara default, pesan yang ditulis bot diabaikan. - Jika Anda menetapkan `channels.discord.allowBots=true`, gunakan aturan mention dan allowlist yang ketat untuk menghindari perilaku loop. - Lebih pilih `channels.discord.allowBots="mentions"` agar hanya menerima pesan bot yang menyebut bot. + Jika Anda menyetel `channels.discord.allowBots=true`, gunakan aturan mention dan allowlist yang ketat untuk menghindari perilaku loop. + Lebih baik gunakan `channels.discord.allowBots="mentions"` untuk hanya menerima pesan bot yang menyebut bot. - + - pastikan OpenClaw tetap terbaru (`openclaw update`) agar logika pemulihan penerimaan voice Discord tersedia - - konfirmasi `channels.discord.voice.daveEncryption=true` (default) + - konfirmasikan `channels.discord.voice.daveEncryption=true` (default) - mulai dari `channels.discord.voice.decryptionFailureTolerance=24` (default upstream) dan sesuaikan hanya jika diperlukan - pantau log untuk: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - jika kegagalan berlanjut setelah bergabung ulang otomatis, kumpulkan log dan bandingkan dengan [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) + - jika kegagalan berlanjut setelah join ulang otomatis, kumpulkan log dan bandingkan dengan [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) @@ -1244,9 +1245,9 @@ Field Discord dengan sinyal tinggi: - inbound worker: `inboundWorker.runTimeoutMs` - balasan/riwayat: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` - pengiriman: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- streaming: `streaming` (alias legacy: `streamMode`), `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- streaming: `streaming` (alias legacy: `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` - media/retry: `mediaMaxMb`, `retry` - - `mediaMaxMb` membatasi unggahan Discord keluar (default: `100MB`) + - `mediaMaxMb` membatasi upload Discord outbound (default: `100MB`) - aksi: `actions.*` - presence: `activity`, `status`, `activityType`, `activityUrl` - UI: `ui.components.accentColor` @@ -1255,15 +1256,15 @@ Field Discord dengan sinyal tinggi: ## Keamanan dan operasi - Perlakukan token bot sebagai rahasia (`DISCORD_BOT_TOKEN` lebih disukai di lingkungan yang diawasi). -- Berikan izin Discord seminimal mungkin. -- Jika deploy/state perintah basi, mulai ulang gateway dan periksa ulang dengan `openclaw channels status --probe`. +- Berikan izin Discord dengan hak minimum. +- Jika deploy/status perintah sudah usang, restart gateway dan periksa ulang dengan `openclaw channels status --probe`. ## Terkait - [Pairing](/id/channels/pairing) -- [Grup](/id/channels/groups) -- [Perutean saluran](/id/channels/channel-routing) -- [Keamanan](/id/gateway/security) -- [Perutean multi-agen](/id/concepts/multi-agent) -- [Pemecahan masalah](/id/channels/troubleshooting) +- [Groups](/id/channels/groups) +- [Channel routing](/id/channels/channel-routing) +- [Security](/id/gateway/security) +- [Multi-agent routing](/id/concepts/multi-agent) +- [Troubleshooting](/id/channels/troubleshooting) - [Slash commands](/id/tools/slash-commands) diff --git a/docs/id/channels/slack.md b/docs/id/channels/slack.md index 38320d5ab..b843ad924 100644 --- a/docs/id/channels/slack.md +++ b/docs/id/channels/slack.md @@ -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 - DM Slack default ke mode pairing. + DM Slack secara default menggunakan mode pairing. Perilaku perintah native dan katalog perintah. @@ -34,11 +34,11 @@ Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode - 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 @@ -80,7 +80,7 @@ openclaw gateway - 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 ``` - 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. @@ -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. - + - 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 atau max-age " + "description": "Kelola kedaluwarsa pengikatan thread", + "usage_hint": "idle or max-age " }, { "command": "/think", - "description": "Atur level berpikir", + "description": "Atur level pemikiran", "usage_hint": "" }, { "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=|size=|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 atau max-age ", + "description": "Kelola kedaluwarsa pengikatan thread", + "usage_hint": "idle or max-age ", "url": "https://gateway-host.example.com/slack/events" }, { "command": "/think", - "description": "Atur level berpikir", + "description": "Atur level pemikiran", "usage_hint": "", "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. - - 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. + + 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:`. @@ -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`. -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. -## 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 `. @@ -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` @@ -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.`; nama hanya melalui resolusi startup atau `dangerouslyAllowNameMatching`): + Kontrol per-channel (`channels.slack.channels.`; 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:`) @@ -700,37 +700,37 @@ Action pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `re - Sesi channel: `agent::slack:channel:`. - Balasan thread dapat membuat sufiks sesi thread (`:thread:`) 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:]]` -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..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 - - 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. + + 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`. - + - 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 @@ -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::slack:slash:` dan tetap merutekan eksekusi perintah ke sesi percakapan target menggunakan `CommandTargetSessionKey`. +Sesi slash menggunakan key terisolasi seperti `agent::slack:slash:` 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 - - Validasi token bot + app dan aktivasi Socket Mode di pengaturan aplikasi Slack. + + 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. @@ -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. - 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) diff --git a/docs/id/channels/telegram.md b/docs/id/channels/telegram.md index b4b868977..20686c8ed 100644 --- a/docs/id/channels/telegram.md +++ b/docs/id/channels/telegram.md @@ -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. - + Kebijakan DM default untuk Telegram adalah pairing. - Diagnostik lintas-channel dan playbook perbaikan. + Diagnostik lintas channel dan panduan perbaikan. Pola dan contoh konfigurasi channel lengkap. @@ -76,7 +76,7 @@ openclaw pairing approve telegram -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. ## 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. - 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 - `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/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/getUpdates" 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. - 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/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/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:` 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 - - OpenClaw dapat melakukan streaming balasan parsial secara real time: + + 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/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 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`. @@ -337,22 +338,22 @@ curl "https://api.telegram.org/bot/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/getUpdates" 3. `/pair pending` menampilkan daftar permintaan yang tertunda (termasuk role/scopes) 4. setujui permintaan: - `/pair approve ` 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/getUpdates" } ``` - Klik callback diteruskan ke agent sebagai teks: + Klik callback diteruskan ke agen sebagai teks: `callback_data: ` - + Aksi tool Telegram meliputi: - `sendMessage` (`to`, `content`, opsional `mediaUrl`, `replyToMessageId`, `messageThreadId`) @@ -456,10 +457,10 @@ curl "https://api.telegram.org/bot/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/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. - Supergroup forum: + Supergrup forum: - - kunci sesi topik menambahkan `:topic:` + - session key topik menambahkan `:topic:` - balasan dan pengetikan menargetkan thread topik - - jalur config topik: + - path config topik: `channels.telegram.groups..topics.` Kasus khusus topik umum (`threadId=1`): @@ -494,10 +495,10 @@ curl "https://api.telegram.org/bot/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/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/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/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 --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/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. @@ -596,7 +597,7 @@ curl "https://api.telegram.org/bot/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/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/getUpdates" - 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/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`. @@ -720,19 +721,19 @@ curl "https://api.telegram.org/bot/getUpdates" - `channels.telegram.accounts..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. 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/getUpdates" - + 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. @@ -773,17 +774,17 @@ curl "https://api.telegram.org/bot/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[""].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 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) -## 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`. @@ -912,23 +913,23 @@ Override per-akun, per-grup, dan per-topik didukung (pewarisan yang sama seperti - + - 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` - 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..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. - `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. - - 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 -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..groupPolicy`: override per-grup untuk groupPolicy (`open | allowlist | disabled`). - `channels.telegram.groups..requireMention`: default gating mention. - - `channels.telegram.groups..skills`: filter Skills (hilangkan = semua Skills, kosong = tidak ada). + - `channels.telegram.groups..skills`: filter Skills (tidak diisi = semua Skills, kosong = tidak ada). - `channels.telegram.groups..allowFrom`: override allowlist pengirim per-grup. - `channels.telegram.groups..systemPrompt`: system prompt tambahan untuk grup. - `channels.telegram.groups..enabled`: nonaktifkan grup saat `false`. - `channels.telegram.groups..topics..*`: override per-topik (field grup + `agentId` khusus topik). - - `channels.telegram.groups..topics..agentId`: rutekan topik ini ke agent tertentu (mengoverride routing level grup dan binding). + - `channels.telegram.groups..topics..agentId`: rutekan topik ini ke agen tertentu (menimpa routing tingkat grup dan binding). - `channels.telegram.groups..topics..groupPolicy`: override per-topik untuk groupPolicy (`open | allowlist | disabled`). - `channels.telegram.groups..topics..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..topics..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..topics..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..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..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) diff --git a/docs/id/gateway/multiple-gateways.md b/docs/id/gateway/multiple-gateways.md index 1987cf1ca..2c51ffeda 100644 --- a/docs/id/gateway/multiple-gateways.md +++ b/docs/id/gateway/multiple-gateways.md @@ -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..cdpPort` per instans. -- Chrome jarak jauh: gunakan `browser.profiles..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..cdpPort` per instance. +- Chrome jarak jauh: gunakan `browser.profiles..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. diff --git a/docs/id/tools/slash-commands.md b/docs/id/tools/slash-commands.md index b152532cd..48eff97e9 100644 --- a/docs/id/tools/slash-commands.md +++ b/docs/id/tools/slash-commands.md @@ -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 `! ` (dengan `/bash ` 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 `! ` untuk menjalankan perintah shell host (`/bash ` 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 ` dan `/session max-age ` mengelola masa berlaku thread-binding. -- `/think ` 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= security= ask= node=` menampilkan atau menetapkan default exec. -- `/model [name|#|status]` menampilkan atau menetapkan model. -- `/models [provider] [page] [limit=|size=|all]` mencantumkan provider atau model untuk suatu provider. -- `/queue ` mengelola perilaku antrean (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) plus opsi seperti `debounce:2s cap:25 drop:summarize`. +- `/session idle ` dan `/session max-age ` mengelola kedaluwarsa pengikatan thread. +- `/think ` 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= security= ask= node=` menampilkan atau mengatur default exec. +- `/model [name|#|status]` menampilkan atau mengatur model. +- `/models [provider] [page] [limit=|size=|all]` mencantumkan provider atau model untuk sebuah provider. +- `/queue ` 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 [input]` menjalankan skill berdasarkan nama. +- `/whoami` menampilkan id pengirim Anda. Alias: `/id`. +- `/skill [input]` menjalankan sebuah skill berdasarkan nama. - `/allowlist [list|add|remove] ...` mengelola entri allowlist. Hanya teks. - `/approve ` menyelesaikan prompt persetujuan exec. -- `/btw ` mengajukan pertanyaan sampingan tanpa mengubah konteks sesi di masa depan. Lihat [/tools/btw](/id/tools/btw). +- `/btw ` 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 ` 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 ` membatalkan satu atau semua sub-agent yang sedang berjalan. -- `/steer ` 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 ` 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 ` menjalankan perintah shell host. Hanya teks. Alias: `! `. 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 [duration]|disarm` mempersenjatai sementara perintah node ponsel berisiko tinggi. -- `/voice status|list [limit]|set ` mengelola config suara Talk. Di Discord, nama perintah native adalah `/talkvoice`. +- `/phone status|arm [duration]|disarm` untuk sementara mengaktifkan perintah node ponsel berisiko tinggi. +- `/voice status|list [limit]|set ` 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 [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..commands.nativeSkills`. +- pendaftaran perintah skill native dikontrol oleh `commands.nativeSkills` dan `channels..commands.nativeSkills`. Catatan: -- Perintah menerima `:` opsional di antara perintah dan argumen (misalnya `/think: high`, `/send: on`, `/help:`). -- `/new ` 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 ` yang menargetkan config dan `/config set channels..accounts....` 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 ` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/archive lokal, paket npm, atau `clawhub:`. -- `/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 ` 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 ` yang menargetkan konfigurasi dan `/config set channels..accounts....` 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 ` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/arsip lokal, paket npm, atau `clawhub:`. +- `/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 [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 [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::discord:slash:` - - Slack: `agent::slack:slash:` (prefiks dapat dikonfigurasi melalui `channels.slack.slashCommand.sessionPrefix`) + - Slack: `agent::slack:slash:` (awalan dapat dikonfigurasi melalui `channels.slack.slashCommand.sessionPrefix`) - Telegram: `telegram:slash:` (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: