Dokumentasi Teknis
Referensi API & Integrasi Ekho
Dokumen ini untuk developer yang ingin memahami cara kerja API Ekho — autentikasi, endpoint yang tersedia, dan mekanisme realtime. Untuk panduan pemakaian dashboard sehari-hari, lihat Panduan Pengguna.
Ringkasan Arsitektur
Ekho adalah platform WhatsApp Business API (WABA) resmi berbasis model reseller — Anda tidak perlu mengurus akun Meta Business sendiri secara mandiri, kami yang mengelola koneksi ke WhatsApp Business Platform di baliknya. Dashboard Anda berkomunikasi dengan backend kami lewat REST API standar (JSON), dengan channel realtime terpisah untuk chat masuk & progres campaign.
- REST API — semua aksi (kirim pesan, kelola kontak, buat campaign, dst) lewat HTTP request biasa, response JSON.
- Realtime — pesan masuk & progres import/campaign dikirim lewat WebSocket (private channel per akun), dengan fallback polling kalau koneksi soket belum aktif.
- Multi-tenant — setiap akun bisnis terisolasi penuh; token API Anda hanya bisa mengakses data milik akun Anda sendiri.
Autentikasi
Login menggunakan kode OTP lewat email (bukan password) — lebih aman karena tidak ada password yang bisa bocor atau dipakai ulang dari layanan lain.
POST /request-otpdengan{ email }— kode 6 digit dikirim ke email terdaftar, berlaku 5 menit.POST /logindengan{ email, otp }— response berisiaccess_token(Bearer token).- Sertakan token di setiap request selanjutnya lewat header
Authorization: Bearer <token>.
POST /request-otp
{ "email": "nama@bisnis.com" }
POST /login
{ "email": "nama@bisnis.com", "otp": "123456" }
// 200
{
"access_token": "1|xxxxxxxxxxxx",
"token_type": "Bearer",
"user": { "id": 1, "name": "...", "tenant": { "id": 7, "company_name": "..." } }
}Referensi API
Ringkasan endpoint utama. Semua endpoint di bawah (kecuali login) butuh header Authorization: Bearer <token>.
Akun & Dashboard
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /me | Data akun & profil bisnis yang sedang login |
| GET | /dashboard | Statistik pengiriman 30 hari & saldo |
| POST | /logout | Akhiri sesi, cabut token aktif |
Kontak
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /contact-groups | List grup kontak |
| POST | /contact-groups | Buat grup kontak baru |
| POST | /contacts/import | Import kontak dari file (async) |
| GET | /contacts/import/:id | Status progres import |
Template Pesan
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /templates | List template & status approval |
| POST | /templates | Ajukan template baru untuk direview |
| GET | /templates/:id/refresh | Cek status approval terbaru |
Campaign
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /campaigns | List campaign |
| POST | /campaigns | Buat & kirim/jadwalkan campaign |
| GET | /campaigns/:id | Detail & progres pengiriman |
Chat
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /chats | List percakapan |
| GET | /chats/:phone | Riwayat pesan satu nomor |
| POST | /chats/:phone/send | Kirim balasan |
Onboarding & Billing
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /onboarding/request-number | Status pengajuan nomor WhatsApp |
| POST | /onboarding/request-number | Ajukan nomor WhatsApp baru |
| POST | /topup | Buat transaksi top-up saldo |
Webhook & Realtime
Event realtime (pesan masuk, progres import, progres campaign) dikirim lewat WebSocket ke channel privat khusus akun Anda — Anda tidak perlu mengekspos endpoint webhook sendiri untuk menerima event ini di dashboard.
- Pesan WhatsApp masuk dari pelanggan tampil realtime di Chat Inbox tanpa reload.
- Progres import kontak & pengiriman campaign ter-update otomatis selagi berjalan.
- Kalau koneksi realtime terputus, dashboard otomatis fallback ke polling status secara berkala.
Rate Limit & Batasan
| Batasan | Nilai |
|---|---|
| Request API umum | Dibatasi per-akun untuk mencegah penyalahgunaan |
| Login/OTP | Dibatasi khusus untuk mencegah brute-force |
| Kirim pesan blast | Mengikuti batas resmi WhatsApp Business Platform (± 1 pesan/detik per akun) |
| Upload file import kontak | Maks 10MB, format .xlsx / .xls / .csv |
| Percobaan OTP salah | 3x sebelum akun dikunci sementara 10 menit |
Response 429 Too Many Requests berarti Anda melebihi salah satu batas di atas — tunggu sejenak sebelum mencoba lagi.
Model Data
Bentuk data utama yang akan Anda temui di response API.
Contact
{ id, name, phone, dynamic_data: { ...kolom custom dari import } }
Template
{ id, name, category: "MARKETING" | "UTILITY" | "AUTHENTICATION",
status: "PENDING" | "APPROVED" | "REJECTED" }
Campaign
{ id, name, status: "PENDING" | "PROCESSING" | "COMPLETED" | "FAILED",
total_contacts, total_cost,
progress: { sent, delivered, read, failed, queued } }
ChatMessage
{ id, customer_phone, message, direction: "inbound" | "outbound", created_at }Error Handling
| Status | Arti |
|---|---|
| 200 / 201 | Berhasil |
| 202 | Diterima, diproses di background (mis. import kontak, campaign) |
| 401 | Token tidak valid / sesi berakhir — perlu login ulang |
| 403 | Akun tidak aktif / tidak punya akses ke resource ini |
| 422 | Validasi gagal — cek field `message` / `errors` di response |
| 429 | Melebihi rate limit — lihat §Rate Limit & Batasan |
| 5xx | Gangguan di sisi server kami — coba lagi, hubungi support kalau berulang |
// Contoh error validasi
{
"message": "The given data was invalid.",
"errors": { "phone_number": ["The phone number field is required."] }
}FAQ Teknis
Apakah ini WhatsApp API resmi atau unofficial (QR-scan)?
Resmi — Ekho hanya berjalan di atas WhatsApp Business Platform resmi Meta. Kami tidak mendukung dan tidak akan pernah menawarkan jalur unofficial yang berisiko nomor Anda diblokir.
Bisakah saya integrasikan Ekho ke sistem internal (CRM/ERP) saya?
Bisa lewat REST API di atas untuk kebutuhan baca-data dan kirim pesan terprogram. Untuk kebutuhan integrasi khusus (webhook keluar, SSO, dsb), hubungi tim kami untuk mendiskusikan skema yang sesuai.
Apakah data pelanggan saya terenkripsi?
Data sensitif (termasuk data kontak dinamis dari import) disimpan terenkripsi di database kami. Trafik ke API selalu lewat HTTPS.