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.