Panduan/Untuk developer
Saya sudah punya AI sendiri, saya hanya butuh WhatsApp-nya
WACO jadi antarmuka WhatsApp resmi, otak tetap milik Anda: pesan masuk lewat webhook, balasan lewat API.
3 menit baca
Banyak yang datang dengan kalimat yang sama: asisten AI-nya sudah jalan, tinggal butuh WhatsApp. Itu memang salah satu pemakaian WACO yang paling lurus. Operator AI bawaan kami tidak perlu diaktifkan, dan tidak ada biaya AI dari kami. Yang Anda pakai hanya nomor resminya, webhook, dan API.
Alurnya hanya tiga potong
- Pesan masuk dikirim WACO ke URL Anda sebagai
message.received. - AI Anda berpikir di infrastruktur Anda sendiri.
- Balasannya dikirim lewat
POST /api/v1/balas.
Yang disiapkan sekali
- Kunci API
waco_…dari halaman Pengaturan. - URL webhook (wajib HTTPS) di halaman Developer. WACO menampilkan secret
whsec_…satu kali; catat, dipakai untuk memverifikasi tanda tangan.
Contoh utuh, Node + Express
const express = require('express');
const crypto = require('crypto');
const app = express();
// Tanda tangan dihitung atas BODY MENTAH, jadi jangan pakai express.json() di jalur ini.
app.post('/waco', express.raw({ type: '*/*' }), async (req, res) => {
const dihitung = 'sha256=' + crypto.createHmac('sha256', process.env.WACO_WEBHOOK_SECRET)
.update(req.body).digest('hex');
const diterima = String(req.get('X-WACO-Signature') || '');
if (diterima.length !== dihitung.length ||
!crypto.timingSafeEqual(Buffer.from(diterima), Buffer.from(dihitung))) {
return res.sendStatus(401);
}
// 1) Balas 200 DULU. AI yang lambat tidak boleh menahan webhook.
res.sendStatus(200);
const ev = JSON.parse(req.body.toString('utf8'));
if (ev.event !== 'message.received') return; // status & echo diabaikan
if (sudahPernah(ev.pesan.id)) return; // kiriman bisa terulang
// 2) Antrekan per nomor supaya satu pelanggan diproses berurutan
antre(ev.dari, async () => {
const jawaban = await aiAnda(ev.dari, ev.pesan.teks); // otak Anda sendiri
// 3) Kirim balasannya kembali lewat WACO
await fetch('https://waco.id/api/v1/balas', {
method: 'POST',
headers: {
Authorization: 'Bearer ' + process.env.WACO_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({ nomor: ev.dari, teks: jawaban }),
});
});
});
app.listen(3000);
Empat hal yang sering bikin kaget
- Balas 200 dulu, berpikir belakangan. Kalau Anda menunggu AI selesai baru menjawab 200, kiriman dianggap gagal dan diulang, dan pelanggan bisa menerima jawaban dobel.
- Jendela 24 jam milik Meta. Di luar 24 jam sejak pesan terakhir pelanggan,
balasan teks bebas ditolak dan harus memakai template. Template bisa dibuat lewat
POST /api/v1/template, tapi tetap menunggu persetujuan Meta. - Media datang sebagai ID, bukan URL. Ambil berkasnya dengan
GET /api/v1/media/:idbila AI Anda perlu melihat gambarnya. - Kiriman bisa terulang. Simpan
pesan.idyang sudah diproses minimal sehari.
Ruang percakapan tim boleh tetap menyala. Event yang sama dikirim ke dua tempat: AI Anda menerima lewat webhook, tim Anda tetap melihat percakapannya dan bisa mengambil alih kapan saja. Gangguan di salah satu sisi tidak menahan yang lain.
Kalau AI Anda berbentuk agen
WACO juga menyediakan server MCP di /mcp, sehingga agen Anda bisa
memanggil WACO sebagai alat (menyiapkan blast berkonfirmasi, membaca riwayat, mengirim pesan) tanpa
menulis integrasi HTTP sendiri. Lihat panduan MCP.
Rinciannya ada di panduan API dan panduan webhook. Spesifikasi mesinnya di OpenAPI. Khusus pemakai OpenClaw, ada panduan tersendiri.
← SebelumnyaSaya ingin pesan masuk otomatis ditugaskan ke orang tertentu, bukan dipilih manual
Berikutnya →Saya pakai OpenClaw dan ingin WhatsApp-nya benar, bukan pindai QR yang gampang putus
Masih menemui kendala setelah mengikuti panduan ini?
Hubungi kami dari dashboard — sertakan tangkapan layar bila ada, itu mempercepat
semuanya.