WhatsApp (Web channel)
Status: siap produksi melalui WhatsApp Web (Baileys). Gateway memiliki sesi tertaut.Instal (sesuai kebutuhan)
- Onboarding (
openclaw onboard) danopenclaw channels add --channel whatsappakan meminta Anda menginstal plugin WhatsApp saat pertama kali memilihnya. openclaw channels login --channel whatsappjuga menawarkan alur instalasi saat plugin belum tersedia.- Dev channel + checkout git: default ke path plugin lokal.
- Stable/Beta: default ke paket npm
@openclaw/whatsapp.
Pairing
Kebijakan DM default adalah pairing untuk pengirim yang tidak dikenal.
Channel troubleshooting
Diagnostik lintas channel dan panduan perbaikan.
Gateway configuration
Pola dan contoh config channel lengkap.
Penyiapan cepat
OpenClaw merekomendasikan menjalankan WhatsApp pada nomor terpisah jika memungkinkan. (Metadata channel dan alur penyiapan dioptimalkan untuk penyiapan tersebut, tetapi penyiapan nomor pribadi juga didukung.)
Pola deployment
Nomor khusus (direkomendasikan)
Nomor khusus (direkomendasikan)
Ini adalah mode operasional yang paling bersih:
- identitas WhatsApp terpisah untuk OpenClaw
- allowlist DM dan batas perutean yang lebih jelas
- kemungkinan kebingungan obrolan sendiri yang lebih rendah
Fallback nomor pribadi
Fallback nomor pribadi
Onboarding mendukung mode nomor pribadi dan menulis baseline yang ramah obrolan sendiri:
dmPolicy: "allowlist"allowFrommencakup nomor pribadi AndaselfChatMode: true
allowFrom.Cakupan channel khusus WhatsApp Web
Cakupan channel khusus WhatsApp Web
Channel platform pesan berbasis WhatsApp Web (
Baileys) dalam arsitektur channel OpenClaw saat ini.Tidak ada channel pesan Twilio WhatsApp terpisah dalam registry channel obrolan bawaan.Model runtime
- Gateway memiliki socket WhatsApp dan loop reconnect.
- Pengiriman keluar memerlukan listener WhatsApp aktif untuk akun target.
- Obrolan status dan siaran diabaikan (
@status,@broadcast). - Obrolan langsung menggunakan aturan sesi DM (
session.dmScope; defaultmainmenggabungkan DM ke sesi utama agen). - Sesi grup diisolasi (
agent:<agentId>:whatsapp:group:<jid>).
Kontrol akses dan aktivasi
- Kebijakan DM
- Kebijakan grup + allowlist
- Mention + /activation
channels.whatsapp.dmPolicy mengontrol akses obrolan langsung:pairing(default)allowlistopen(memerlukanallowFromuntuk menyertakan"*")disabled
allowFrom menerima nomor bergaya E.164 (dinormalisasi secara internal).Override multi-akun: channels.whatsapp.accounts.<id>.dmPolicy (dan allowFrom) lebih diprioritaskan daripada default tingkat channel untuk akun tersebut.Detail perilaku runtime:- pairing disimpan di allow-store channel dan digabungkan dengan
allowFromyang dikonfigurasi - jika tidak ada allowlist yang dikonfigurasi, nomor diri tertaut diizinkan secara default
- DM keluar
fromMetidak pernah dipair otomatis
Perilaku nomor pribadi dan obrolan sendiri
Saat nomor diri tertaut juga ada diallowFrom, perlindungan obrolan sendiri WhatsApp aktif:
- lewati tanda baca untuk giliran obrolan sendiri
- abaikan perilaku pemicu otomatis mention-JID yang sebaliknya akan meming diri Anda sendiri
- jika
messages.responsePrefixtidak diatur, balasan obrolan sendiri default ke[{identity.name}]atau[openclaw]
Normalisasi pesan dan konteks
Envelope masuk + konteks balasan
Envelope masuk + konteks balasan
Pesan WhatsApp masuk dibungkus dalam envelope masuk bersama.Jika ada balasan kutipan, konteks ditambahkan dalam bentuk ini:Bidang metadata balasan juga diisi jika tersedia (
ReplyToId, ReplyToBody, ReplyToSender, sender JID/E.164).Placeholder media dan ekstraksi lokasi/kontak
Placeholder media dan ekstraksi lokasi/kontak
Pesan masuk yang hanya berisi media dinormalisasi dengan placeholder seperti:
<media:image><media:video><media:audio><media:document><media:sticker>
Injeksi riwayat grup tertunda
Injeksi riwayat grup tertunda
Untuk grup, pesan yang belum diproses dapat dibuffer dan disisipkan sebagai konteks saat bot akhirnya dipicu.
- batas default:
50 - config:
channels.whatsapp.historyLimit - fallback:
messages.groupChat.historyLimit 0menonaktifkan
[Chat messages since your last reply - for context][Current message - respond to this]
Tanda baca
Tanda baca
Tanda baca diaktifkan secara default untuk pesan WhatsApp masuk yang diterima.Nonaktifkan secara global:Override per akun:Giliran obrolan sendiri melewati tanda baca bahkan saat diaktifkan secara global.
Pengiriman, pemotongan, dan media
Pemotongan teks
Pemotongan teks
- batas potongan default:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"- mode
newlinemengutamakan batas paragraf (baris kosong), lalu fallback ke pemotongan aman berdasarkan panjang
Perilaku media keluar
Perilaku media keluar
- mendukung payload gambar, video, audio (PTT voice-note), dan dokumen
audio/oggditulis ulang menjadiaudio/ogg; codecs=opusuntuk kompatibilitas voice-note- pemutaran GIF animasi didukung melalui
gifPlayback: truepada pengiriman video - caption diterapkan pada item media pertama saat mengirim payload balasan multi-media
- sumber media dapat berupa HTTP(S),
file://, atau path lokal
Batas ukuran media dan perilaku fallback
Batas ukuran media dan perilaku fallback
- batas penyimpanan media masuk:
channels.whatsapp.mediaMaxMb(default50) - batas pengiriman media keluar:
channels.whatsapp.mediaMaxMb(default50) - override per akun menggunakan
channels.whatsapp.accounts.<accountId>.mediaMaxMb - gambar dioptimalkan otomatis (resize/quality sweep) agar sesuai dengan batas
- saat pengiriman media gagal, fallback item pertama mengirim peringatan teks alih-alih diam-diam membuang respons
Tingkat reaction
channels.whatsapp.reactionLevel mengontrol seberapa luas agen menggunakan reaction emoji di WhatsApp:
| Level | Reaction ack | Reaction yang dimulai agen | Deskripsi |
|---|---|---|---|
"off" | Tidak | Tidak | Tidak ada reaction sama sekali |
"ack" | Ya | Tidak | Hanya reaction ack (tanda terima pra-balasan) |
"minimal" | Ya | Ya (konservatif) | Ack + reaction agen dengan panduan konservatif |
"extensive" | Ya | Ya (didorong) | Ack + reaction agen dengan panduan yang didorong |
"minimal".
Override per akun menggunakan channels.whatsapp.accounts.<id>.reactionLevel.
Reaction acknowledgment
WhatsApp mendukung reaction ack segera saat penerimaan masuk melaluichannels.whatsapp.ackReaction.
Reaction ack dibatasi oleh reactionLevel — reaction ini ditekan saat reactionLevel adalah "off".
- dikirim segera setelah pesan masuk diterima (pra-balasan)
- kegagalan dicatat dalam log tetapi tidak memblokir pengiriman balasan normal
- mode grup
mentionsbereaksi pada giliran yang dipicu mention; aktivasi grupalwaysbertindak sebagai bypass untuk pemeriksaan ini - WhatsApp menggunakan
channels.whatsapp.ackReaction(messages.ackReactionlegacy tidak digunakan di sini)
Multi-akun dan kredensial
Pemilihan akun dan default
Pemilihan akun dan default
- id akun berasal dari
channels.whatsapp.accounts - pemilihan akun default:
defaultjika ada, jika tidak id akun pertama yang dikonfigurasi (diurutkan) - id akun dinormalisasi secara internal untuk lookup
Path kredensial dan kompatibilitas legacy
Path kredensial dan kompatibilitas legacy
- path autentikasi saat ini:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - file cadangan:
creds.json.bak - autentikasi default legacy di
~/.openclaw/credentials/masih dikenali/dimigrasikan untuk alur akun default
Perilaku logout
Perilaku logout
openclaw channels logout --channel whatsapp [--account <id>] menghapus status autentikasi WhatsApp untuk akun tersebut.Dalam direktori autentikasi legacy, oauth.json dipertahankan sementara file autentikasi Baileys dihapus.Alat, action, dan penulisan config
- Dukungan alat agen mencakup action reaction WhatsApp (
react). - Pembatasan action:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Penulisan config yang dimulai channel diaktifkan secara default (nonaktifkan melalui
channels.whatsapp.configWrites=false).
Pemecahan masalah
Belum tertaut (QR diperlukan)
Belum tertaut (QR diperlukan)
Gejala: status channel melaporkan belum tertaut.Perbaikan:
Tertaut tetapi terputus / loop reconnect
Tertaut tetapi terputus / loop reconnect
Gejala: akun tertaut dengan disconnect berulang atau upaya reconnect.Perbaikan:Jika perlu, tautkan ulang dengan
channels login.Tidak ada listener aktif saat mengirim
Tidak ada listener aktif saat mengirim
Pengiriman keluar gagal cepat saat tidak ada listener gateway aktif untuk akun target.Pastikan gateway berjalan dan akun tertaut.
Pesan grup tiba-tiba diabaikan
Pesan grup tiba-tiba diabaikan
Periksa dalam urutan ini:
groupPolicygroupAllowFrom/allowFrom- entri allowlist
groups - pembatasan mention (
requireMention+ pola mention) - kunci duplikat di
openclaw.json(JSON5): entri terakhir menggantikan entri sebelumnya, jadi gunakan satugroupPolicyper cakupan
Peringatan runtime Bun
Peringatan runtime Bun
Runtime gateway WhatsApp seharusnya menggunakan Node. Bun ditandai tidak kompatibel untuk operasi gateway WhatsApp/Telegram yang stabil.
Penunjuk referensi konfigurasi
Referensi utama: Bidang WhatsApp dengan sinyal tinggi:- akses:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - pengiriman:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - multi-akun:
accounts.<id>.enabled,accounts.<id>.authDir, override tingkat akun - operasi:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.* - perilaku sesi:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit