Integrasi n8n dengan WhatsApp Business API: otomasi tanpa koding lewat WACO
n8n, Make, dan Zapier hanya butuh dua hal untuk berbicara dengan WhatsApp lewat WACO, dan keduanya sudah ada di setiap langganan: webhook yang mengirim tiap pesan masuk ke alur Anda, dan API untuk membalas atau mengirim template. Tidak ada node khusus yang harus dipasang; node Webhook dan HTTP Request bawaan cukup. Panduan ini memakai n8n sebagai contoh; pola yang sama berlaku untuk Make dan Zapier.
Yang Anda butuhkan
- Akun WACO dengan nomor tersambung dan kunci API (
waco_β¦) dari halaman Developer, lihat panduan mulai API. - Secret webhook (
whsec_β¦) yang tampil saat Anda mengisi URL webhook di halaman yang sama, lihat panduan webhook. - n8n Cloud atau n8n self-host yang bisa diakses lewat HTTPS.
Langkah 1. Impor workflow contoh
Salin JSON di bawah, lalu di n8n pilih Workflows β Import from clipboard. Isinya tiga node: Webhook menerima event WACO, Code memverifikasi tanda tangan dan menyaring, HTTP Request membalas lewat API WACO. Contoh logikanya: bila pelanggan menyebut "harga", kirim tautan daftar harga.
{
"name": "WACO β n8n: balas otomatis",
"nodes": [
{ "id": "1", "name": "Webhook WACO", "type": "n8n-nodes-base.webhook", "typeVersion": 2, "position": [0, 0],
"parameters": { "httpMethod": "POST", "path": "waco", "responseMode": "onReceived", "options": { "rawBody": true } } },
{ "id": "2", "name": "Verifikasi & saring", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [260, 0],
"parameters": { "jsCode": "// 1) Verifikasi tanda tangan WACO atas BODY MENTAH (bukan JSON yang sudah di-parse)\nconst crypto = require('crypto');\nconst SECRET = 'whsec_GANTI_DENGAN_SECRET_ANDA';\nconst raw = await this.helpers.getBinaryDataBuffer(0, 'data');\nconst diterima = String($input.first().json.headers['x-waco-signature'] || '');\nconst dihitung = 'sha256=' + crypto.createHmac('sha256', SECRET).update(raw).digest('hex');\nif (diterima.length !== dihitung.length || !crypto.timingSafeEqual(Buffer.from(diterima), Buffer.from(dihitung))) return [];\nconst ev = JSON.parse(raw.toString('utf8'));\n// 2) Hanya pesan masuk (status & echo diabaikan di contoh ini)\nif (ev.event !== 'message.received') return [];\n// 3) Anti-dobel: webhook WACO bisa terkirim dua kali -> ingat id yang sudah diproses\nconst st = $getWorkflowStaticData('global');\nst.seen = st.seen || {};\nconst kini = Date.now();\nfor (const k of Object.keys(st.seen)) if (kini - st.seen[k] > 86400000) delete st.seen[k];\nif (st.seen[ev.pesan.id]) return [];\nst.seen[ev.pesan.id] = kini;\n// 4) Logika Anda: contoh balas otomatis bila pelanggan menanyakan harga\nconst teks = String(ev.pesan.teks || '').toLowerCase();\nif (!/harga|price|berapa/.test(teks)) return [];\nreturn [{ json: { dari: ev.dari, nama: ev.nama, balasan: 'Halo ' + (ev.nama || '') + ', daftar harga kami: https://contoh.id/harga' } }];" } },
{ "id": "3", "name": "Balas lewat WACO", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [520, 0],
"parameters": { "method": "POST", "url": "https://waco.id/api/v1/balas",
"authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth",
"sendBody": true, "specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ nomor: $json.dari, teks: $json.balasan }) }}",
"options": {} } }
],
"connections": {
"Webhook WACO": { "main": [[{ "node": "Verifikasi & saring", "type": "main", "index": 0 }]] },
"Verifikasi & saring": { "main": [[{ "node": "Balas lewat WACO", "type": "main", "index": 0 }]] }
}
}
Langkah 2. Isi secret & kunci API
- Buka node Verifikasi & saring, ganti
whsec_GANTI_DENGAN_SECRET_ANDAdengan secret webhook Anda. - Buka node Balas lewat WACO β Credential β buat Header Auth baru:
Name
Authorization, ValueBearer waco_KUNCI_ANDA. - Aktifkan workflow (Active), lalu salin Production URL dari node Webhook
(berakhiran
/webhook/waco).
Langkah 3. Daftarkan URL ke WACO
Di halaman Developer, tempel Production URL sebagai URL webhook dan simpan. Kirim chat ke nomor WhatsApp Anda berisi kata "harga", dalam satu-dua detik balasan dari n8n masuk, dan eksekusinya tercatat di Executions n8n.
Tiga hal yang membuat alur ini aman dijalankan terus
- Verifikasi tanda tangan. Setiap POST WACO membawa header
X-WACO-Signature: sha256=β¦, HMAC-SHA256 atas body mentah. Node Code menghitung ulang dari body mentah (opsi Raw Body di node Webhook) dan menolak yang tidak cocok, kalau dilewati, siapa pun yang tahu URL Anda bisa memicu alur. - Anti-dobel. Webhook WACO bisa terkirim dua kali (pengiriman ganda demi keandalan).
Node Code mengingat
pesan.idyang sudah diproses selama 24 jam lewat workflow static data, jadi bot tidak membalas dua kali. - Balas cepat. Node Webhook diset Respond: Immediately sehingga WACO menerima 200 sebelum logika Anda berjalan; pengiriman ulang hanya terjadi bila n8n benar-benar tidak menjawab.
Di n8n self-host, node Code perlu diizinkan memakai modul crypto: set variabel lingkungan
NODE_FUNCTION_ALLOW_BUILTIN=crypto. Di n8n Cloud modul itu sudah tersedia.
Variasi yang sering dipakai
- Catat ke Google Sheets / Notion / Airtable: ganti node HTTP Request dengan node
tujuan; kolomnya
ev.dari,ev.nama,ev.pesan.teks,ev.waktu. - Kirim template dari sistem lain (order baru, tagihan jatuh tempo): tanpa webhook,
cukup node HTTP Request ke
POST https://waco.id/api/v1/kirimdengan body{"nomor":"628β¦","template":"nama_template","isi":["β¦"]}. Template wajib untuk pesan pertama di luar jendela 24 jam;/balashanya untuk membalas chat yang masih hangat. - Lacak status kirim: event
message.statusmembawapesan_idyang sama denganmessage_iddari respons/kirim, cocokkan untuk tahu delivered/read/failed per pesan. - Media masuk: untuk gambar/dokumen, unduh filenya lewat
GET /api/v1/media/{pesan.data.id}dengan kunci API yang sama.
Make dan Zapier
Pola identik: modul Webhooks β Custom webhook (Make) atau Webhooks by Zapier β Catch
Hook menerima event; modul HTTP β Make a request atau Webhooks by Zapier β POST
memanggil API WACO dengan header Authorization: Bearer waco_β¦. Verifikasi tanda tangan
di keduanya memakai modul kode masing-masing (Make: Custom JS, Zapier: Code by Zapier)
dengan logika HMAC yang sama seperti di atas.
Pertanyaan yang sering muncul
Apakah ini butuh paket khusus? Tidak. API dan webhook termasuk di setiap langganan WACO; biaya pesan tetap dibayar ke Meta seperti biasa.
Bisa dipakai bersama ruang percakapan tim? Ya. Webhook berjalan berdampingan: tim tetap membalas dari ruang percakapan, n8n menerima salinan event yang sama.
Ada node WACO resmi di katalog n8n? Belum, dan tidak diperlukan; HTTP Request sudah mencakup seluruh API. Spesifikasi lengkapnya ada di OpenAPI.