Panduan PenggunaDokumentasi Teknis

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.
Ekho tidak menyediakan akses API publik self-service saat ini. Kredensial integrasi (base URL & langkah aktivasi) diberikan oleh tim kami setelah proses onboarding akun selesai.

Autentikasi

Login menggunakan kode OTP lewat email (bukan password) — lebih aman karena tidak ada password yang bisa bocor atau dipakai ulang dari layanan lain.

  1. POST /request-otp dengan { email } — kode 6 digit dikirim ke email terdaftar, berlaku 5 menit.
  2. POST /login dengan { email, otp } — response berisi access_token (Bearer token).
  3. 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": "..." } }
}
Percobaan OTP salah dibatasi 3x sebelum akun dikunci sementara 10 menit — pastikan UI Anda menampilkan sisa percobaan agar pengguna tidak kaget saat terkunci.

Referensi API

Ringkasan endpoint utama. Semua endpoint di bawah (kecuali login) butuh header Authorization: Bearer <token>.

Akun & Dashboard

MethodEndpointDeskripsi
GET/meData akun & profil bisnis yang sedang login
GET/dashboardStatistik pengiriman 30 hari & saldo
POST/logoutAkhiri sesi, cabut token aktif

Kontak

MethodEndpointDeskripsi
GET/contact-groupsList grup kontak
POST/contact-groupsBuat grup kontak baru
POST/contacts/importImport kontak dari file (async)
GET/contacts/import/:idStatus progres import

Template Pesan

MethodEndpointDeskripsi
GET/templatesList template & status approval
POST/templatesAjukan template baru untuk direview
GET/templates/:id/refreshCek status approval terbaru

Campaign

MethodEndpointDeskripsi
GET/campaignsList campaign
POST/campaignsBuat & kirim/jadwalkan campaign
GET/campaigns/:idDetail & progres pengiriman

Chat

MethodEndpointDeskripsi
GET/chatsList percakapan
GET/chats/:phoneRiwayat pesan satu nomor
POST/chats/:phone/sendKirim balasan

Onboarding & Billing

MethodEndpointDeskripsi
GET/onboarding/request-numberStatus pengajuan nomor WhatsApp
POST/onboarding/request-numberAjukan nomor WhatsApp baru
POST/topupBuat 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.
Integrasi webhook keluar (mis. meneruskan event ke sistem internal Anda) belum tersedia sebagai fitur self-service. Hubungi tim kami kalau kebutuhan integrasi Anda memerlukan ini.

Rate Limit & Batasan

BatasanNilai
Request API umumDibatasi per-akun untuk mencegah penyalahgunaan
Login/OTPDibatasi khusus untuk mencegah brute-force
Kirim pesan blastMengikuti batas resmi WhatsApp Business Platform (± 1 pesan/detik per akun)
Upload file import kontakMaks 10MB, format .xlsx / .xls / .csv
Percobaan OTP salah3x 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

StatusArti
200 / 201Berhasil
202Diterima, diproses di background (mis. import kontak, campaign)
401Token tidak valid / sesi berakhir — perlu login ulang
403Akun tidak aktif / tidak punya akses ke resource ini
422Validasi gagal — cek field `message` / `errors` di response
429Melebihi rate limit — lihat §Rate Limit & Batasan
5xxGangguan 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.