Developer

API WhatsApp untuk Developer: Kirim Pesan WA dalam 3 Baris Kode

REST API WA Gateway — POST /api/send dengan response 200 OK
REST API WA Gateway — POST /api/send dengan response 200 OK

Apakah Anda sedang membangun sistem notifikasi, integrasi CRM, atau aplikasi custom yang perlu mengirim pesan WhatsApp secara otomatis? Anda berada di tempat yang tepat.

wagate.id menyediakan REST API yang dirancang developer-first: satu endpoint, tiga parameter, satu response. Tidak ada SDK wajib, tidak ada library khusus — cukup HTTP client yang sudah ada di stack Anda.

💡 TL;DR untuk developer: POST https://wagate.id/api/send dengan header X-Api-Key dan body JSON berisi device_id, phone, message. Response: {"success": true, "status": "sent"}. Selesai.

Mengapa REST API, Bukan SDK?

Banyak layanan messaging memaksa Anda install SDK besar yang mengunci ke bahasa tertentu. wagate.id mengambil pendekatan berbeda: plain HTTP + JSON, yang berarti:

  • Bahasa apapun — PHP, Node.js, Python, Go, Java, Kotlin, Ruby, .NET, bahkan Bash
  • Framework apapun — Laravel, Express, FastAPI, Spring, Gin, Rails
  • Integrasi mudah — kalau bisa kirim HTTP request, Anda bisa pakai API ini
  • Tidak ada vendor lock-in di level kode

Arsitektur API: Sesederhana Mungkin

Base URL

https://wagate.id/api

Autentikasi

Semua request harus menyertakan API key di header:

X-Api-Key: wgk_live_xxxxxxxxxxxxxxxx

API key dibuat di dashboard wagate.id → menu API Keys. Satu key bisa digunakan untuk semua device yang terhubung ke akun Anda.

Format Request

Content-Type: application/json
Accept: application/json

Endpoint: POST /api/send

Satu-satunya endpoint yang Anda butuhkan untuk kirim pesan.

Request Body

{
  "device_id": "string",   // ID perangkat WA yang terhubung
  "phone":     "string",   // Nomor tujuan: format 628xxx (tanpa + atau 08)
  "message":   "string"    // Teks pesan (mendukung emoji & newline \n)
}

Response Sukses (200 OK)

{
  "success": true,
  "status":  "sent",
  "message_id": "wamid.xxx"
}

Response Error

// 401 Unauthorized
{ "success": false, "message": "Invalid API key" }

// 422 Unprocessable Entity
{ "success": false, "message": "The phone field is required" }

// 503 Service Unavailable
{ "success": false, "message": "Device offline or not connected" }

Contoh Kode: 5 Bahasa, 1 Endpoint

cURL (Universal Test)

curl -X POST https://wagate.id/api/send \
  -H "X-Api-Key: wgk_live_xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "device_id": "DEVICE_ID_ANDA",
    "phone":     "6281234567890",
    "message":   "Halo dari API wagate.id! 👋"
  }'

JavaScript / Node.js (fetch)

const response = await fetch('https://wagate.id/api/send', {
  method:  'POST',
  headers: {
    'X-Api-Key':     'wgk_live_xxxx',
    'Content-Type':  'application/json',
  },
  body: JSON.stringify({
    device_id: 'DEVICE_ID_ANDA',
    phone:     '6281234567890',
    message:   'Order #1234 dikonfirmasi! 🎉',
  }),
});

const data = await response.json();
console.log(data.success); // true

Python (requests)

import requests

resp = requests.post(
    'https://wagate.id/api/send',
    headers={'X-Api-Key': 'wgk_live_xxxx'},
    json={
        'device_id': 'DEVICE_ID_ANDA',
        'phone':     '6281234567890',
        'message':   'Kode OTP Anda: 847291 (berlaku 5 menit)',
    },
    timeout=15,
)

print(resp.json())  # {'success': True, 'status': 'sent', ...}

PHP (cURL)

<?php
$ch = curl_init('https://wagate.id/api/send');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode([
        'device_id' => 'DEVICE_ID_ANDA',
        'phone'     => '6281234567890',
        'message'   => 'Pembayaran Rp 150.000 berhasil diterima.',
    ]),
    CURLOPT_HTTPHEADER => [
        'X-Api-Key: wgk_live_xxxx',
        'Content-Type: application/json',
    ],
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
var_dump($result['success']); // bool(true)

Go (net/http)

package main

import (
    "bytes"
    "encoding/json"
    "net/http"
)

func sendWA(phone, message string) bool {
    body, _ := json.Marshal(map[string]string{
        "device_id": "DEVICE_ID_ANDA",
        "phone":     phone,
        "message":   message,
    })
    req, _ := http.NewRequest("POST", "https://wagate.id/api/send", bytes.NewBuffer(body))
    req.Header.Set("X-Api-Key", "wgk_live_xxxx")
    req.Header.Set("Content-Type", "application/json")

    resp, err := http.DefaultClient.Do(req)
    return err == nil && resp.StatusCode == 200
}

Use Case Populer untuk Developer

1. Notifikasi Transaksional (E-commerce)

// Trigger saat order dibuat
sendWA(order.customerPhone,
  `✅ Pesanan #${order.id} berhasil!\n` +
  `Total: Rp ${order.total.toLocaleString()}\n` +
  `Estimasi: 2-3 hari kerja.`
);

2. Kirim Kode OTP

const otp = Math.floor(100000 + Math.random() * 900000);
sendWA(user.phone,
  `🔐 Kode OTP Anda: *${otp}*\nBerlaku 5 menit. Jangan bagikan ke siapapun.`
);

3. Alert Monitoring & DevOps

# Bash: kirim alert saat server down
curl -s -X POST https://wagate.id/api/send \
  -H "X-Api-Key: $WA_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"device_id\":\"$DEVICE_ID\",\"phone\":\"$ONCALL_PHONE\",
       \"message\":\"🚨 Alert: Server $(hostname) CPU > 90%!\"}"

4. Integrasi CRM / Helpdesk

Hubungkan CRM Anda (Salesforce, HubSpot, Zoho, atau custom) ke wagate.id melalui Zapier, Make, atau langsung via API. Setiap kali ada lead baru, tiket support, atau update deal — kirim notifikasi WA otomatis ke sales atau customer.

5. Laporan Otomatis via Cron Job

# crontab: kirim laporan penjualan tiap hari jam 7 pagi
0 7 * * * /usr/local/bin/daily-report.sh
#!/bin/bash
# daily-report.sh
TOTAL=$(mysql -u root -e "SELECT SUM(total) FROM orders WHERE DATE(created_at)=CURDATE()-1" -s)
curl -s -X POST https://wagate.id/api/send \
  -H "X-Api-Key: $WA_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"device_id\":\"$DEVICE_ID\",\"phone\":\"$OWNER_PHONE\",
       \"message\":\"📊 Laporan kemarin: Rp ${TOTAL}\"}"

Endpoint Tambahan

GET /api/status — Cek Status Device

curl https://wagate.id/api/status?device_id=DEVICE_ID \
  -H "X-Api-Key: wgk_live_xxxx"

// Response:
{
  "device_id": "DEVICE_ID",
  "status":    "connected",   // connected | disconnected | pairing
  "phone":     "628123456789",
  "battery":   85
}

Webhook: Terima Pesan Masuk (Real-time)

Selain mengirim, wagate.id juga bisa meneruskan pesan masuk ke endpoint webhook Anda secara real-time.

Payload Webhook

POST https://your-app.com/webhook/wa

{
  "event":      "message.received",
  "session_id": "DEVICE_ID",
  "from":       "628123456789",
  "message":    "Halo, saya mau tanya tentang produk",
  "timestamp":  1718000000
}

Contoh handler (Express.js)

app.post('/webhook/wa', (req, res) => {
  const { event, from, message } = req.body;

  if (event === 'message.received') {
    // Simpan ke database, trigger AI reply, dll.
    console.log(`Pesan dari ${from}: ${message}`);
  }

  res.json({ ok: true });
});

Daftarkan URL webhook di dashboard wagate.id → Perangkat → Edit → Webhook URL.


Rate Limit & Best Practice

Aspek Rekomendasi
⏱️ Jeda antar pesan broadcast 2–5 detik per nomor
🌐 Timeout HTTP request 15 detik
🔄 Retry on failure Max 3x dengan exponential backoff
📱 Format nomor 628xxx — tanpa + atau 0 di depan
📝 Panjang pesan Maks 4.096 karakter per pesan
🔒 Simpan API Key Di environment variable — jangan hardcode di kode
🔒 Keamanan: Simpan API Key dan Device ID di environment variable atau secret manager. Jangan commit ke Git repository.

Mulai Sekarang: Gratis 7 Hari

wagate.id menyediakan masa trial 7 hari gratis tanpa kartu kredit. Dalam 10 menit, Anda bisa:

  1. Daftar di wagate.id/register
  2. Hubungkan nomor WhatsApp (scan QR)
  3. Buat API Key
  4. Kirim pesan WA pertama dari kode Anda

Setelah trial, harga mulai Rp 25.000/bulan per device — tanpa limit pesan, tanpa hidden fee.

→ Lihat Dokumentasi API lengkap di wagate.id/docs

Bagikan:
Siap Otomasi WhatsApp Bisnis Anda?

Coba WA Gateway gratis 7 hari — REST API, multi-device, webhook real-time.