WHATSAPP CENTRE
Simulator WA Lapor Kembali ke Login

Dokumentasi API Integrasi

Developer Hub

Hubungkan sistem eksternal, aplikasi dinas, dashboard pemantau, atau portal pelayanan Anda dengan CRM Kotabaru melalui API. Tersedia API lokal WhatsApp Gateway (v1) dan REST API Manajemen CRM.

1. Panduan Autentikasi & Kunci API

Setiap request API wajib menyertakan autentikasi yang sesuai. CRM menggunakan dua jenis autentikasi berbeda tergantung endpoint yang Anda panggil:

API Key WhatsApp Gateway

Digunakan untuk endpoint API Gateway lokal (kirim pesan mentah & cek status device). Token didapatkan per-perangkat di tab WA Gateway.

Authorization: Bearer TOKEN_GATEWAY_DEVICE_ANDA

API Key REST CRM

Digunakan untuk manajemen data CRM, kontak, percakapan, status aduan, dan analytics. Diatur pada tab Chatbot (Kunci REST API).

X-API-Key: API_KEY_REST_CRM_ANDA

Base URL Server CRM Anda

POST /api/v1/send Kirim pesan WhatsApp via Gateway lokal

Kirim pesan WhatsApp biasa atau media (gambar, dokumen, video, audio) secara programatis melalui perangkat yang terhubung.

Header Autentikasi
HeaderTipeWajibDeskripsi
AuthorizationStringYaFormat: Bearer TOKEN_GATEWAY_DEVICE_ANDA
Content-TypeStringYaHarus berupa application/json
Parameter Body (JSON)
FieldTipeWajibDeskripsi
toStringYaNomor WhatsApp tujuan (contoh: 6281234567890)
typeStringTidakTipe pesan: text (default), media, image, video, audio, document
messageStringYa*Isi teks pesan (wajib jika type = text. Mendukung spintax)
media_urlStringYa*URL file publik (wajib jika type adalah media/image/document)
curl -X POST "https://crm.dishubkotabaru.id/api/v1/send" \
  -H "Authorization: Bearer TOKEN_GATEWAY_DEVICE_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "type": "text",
    "message": "Halo warga Kotabaru, laporan Anda sedang kami proses."
  }'
fetch('https://crm.dishubkotabaru.id/api/v1/send', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer TOKEN_GATEWAY_DEVICE_ANDA',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    to: '6281234567890',
    type: 'text',
    message: 'Halo warga Kotabaru, laporan Anda sedang kami proses.'
  })
})
.then(res => res.json())
.then(console.log);
<?php
$ch = curl_init('https://crm.dishubkotabaru.id/api/v1/send');
$payload = json_encode([
    'to' => '6281234567890',
    'type' => 'text',
    'message' => 'Halo warga Kotabaru, laporan Anda sedang kami proses.'
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer TOKEN_GATEWAY_DEVICE_ANDA',
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
echo $res;
{
  "success": true,
  "message": "Message sent successfully",
  "data": {
    "log_id": 14022,
    "message_id": "3EB09F23B7A8C2D819EA01"
  }
}
GET /api/v1/status Periksa status koneksi WhatsApp Gateway

Mengembalikan info status koneksi perangkat (connected, scanning/qr, disconnected) beserta nomor dan detail kesehatan server bridge.

curl -X GET "https://crm.dishubkotabaru.id/api/v1/status" \
  -H "Authorization: Bearer TOKEN_GATEWAY_DEVICE_ANDA"
{
  "success": true,
  "message": "Device status retrieved",
  "data": {
    "device_id": 5,
    "device_name": "Device Pelayanan",
    "number": "628xxxxxxxx",
    "status": "connected",
    "db_status": "connected",
    "bridge": {
      "status": "online",
      "uptime": "2 hours 14 mins"
    }
  }
}
POST /api/send_wa Kirim WhatsApp & Daftarkan Outreach CRM

Direkomendasikan untuk aplikasi dinas luar (seperti Portal Dishub). Mengirim pesan WhatsApp ke warga, merekam riwayat chat di inbox agen, sekaligus mematikan chatbot CRM (auto-responder) untuk nomor tersebut selama beberapa hari agar agen eksternal leluasa melakukan percakapan.

Parameter Body
FieldTipeWajibDeskripsi
api_keyStringYaAPI Key REST CRM Anda (atau kirim via Header X-API-Key)
phoneStringYaNomor WhatsApp penerima (format 62812xxx atau 0812xxx)
messageStringYaIsi pesan teks yang dikirim
sourceStringTidakNama aplikasi pengirim aduan (contoh: App_Dishub_Portal)
curl -X POST "https://crm.dishubkotabaru.id/api/send_wa" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "6281234567890",
    "message": "Pengaduan parkir liar Anda di Jl. Sudirman telah kami terima. Petugas sedang meluncur ke lokasi.",
    "source": "Portal_Pengaduan_Dishub"
  }'
{
  "status": true,
  "conversation_id": 182,
  "message_id": 140394,
  "message": "Pesan terkirim dan outreach tercatat di inbox CRM."
}
POST /api/register_wa_outreach Mute Chatbot CRM untuk Nomor Tertentu

Mendaftarkan nomor warga dalam sesi outreach eksternal tanpa mengirim pesan baru. Menghindari gangguan bot ketika sistem Anda sedang bertukar pesan manual dengan warga.

curl -X POST "https://crm.dishubkotabaru.id/api/register_wa_outreach" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "6281234567890",
    "source": "Aplikasi_Dishub_Android",
    "note": "Menunggu konfirmasi foto lokasi parkir."
  }'
{
  "status": true,
  "message": "Outreach tercatat. Balasan otomatis CRM dimatikan untuk nomor ini selama 3 hari.",
  "suppress_days": 3
}
GET /api/contacts Ambil semua daftar kontak/warga di CRM
curl -X GET "https://crm.dishubkotabaru.id/api/contacts" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA"
{
  "status": true,
  "data": [
    {
      "id": "18",
      "platform": "whatsapp",
      "external_sender_id": "6281234567890",
      "name": "Budi Hartono",
      "status": "lead",
      "sla_deadline": "2026-06-06 09:30:00",
      "resolved_at": null,
      "profile_pic_url": "uploads/avatars/wa_18.jpg"
    }
  ]
}
GET /api/conversations Ambil daftar percakapan aktif
curl -X GET "https://crm.dishubkotabaru.id/api/conversations" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA"
{
  "status": true,
  "data": [
    {
      "id": "84",
      "contact_id": "18",
      "platform": "whatsapp",
      "status": "open",
      "assigned_agent_id": "2",
      "created_at": "2026-06-05 02:40:00",
      "updated_at": "2026-06-05 03:00:00"
    }
  ]
}
GET /api/messages/{conversation_id} Ambil riwayat pesan percakapan tertentu
curl -X GET "https://crm.dishubkotabaru.id/api/messages/84" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA"
{
  "status": true,
  "data": [
    {
      "id": "1004",
      "conversation_id": "84",
      "direction": "incoming",
      "message_type": "text",
      "message_content": "Mohon info jadwal bus trans.",
      "created_at": "2026-06-05 02:40:00"
    },
    {
      "id": "1005",
      "conversation_id": "84",
      "direction": "outgoing",
      "message_type": "text",
      "message_content": "Halo, bus trans beroperasi jam 06.00 WITA.",
      "created_at": "2026-06-05 02:42:00"
    }
  ]
}
POST /api/send Kirim balasan chat agen ke percakapan aktif
Parameter Body
FieldTipeWajibDeskripsi
conversation_idIntegerYaID percakapan aktif
messageStringYaIsi teks balasan agen
curl -X POST "https://crm.dishubkotabaru.id/api/send" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": 84,
    "message": "Tanggapan laporan sudah kami teruskan ke bidang terkait."
  }'
{
  "status": true,
  "message_id": 1006,
  "message": "Pesan terkirim."
}
POST /api/update_status Ubah status tiket aduan percakapan
Parameter Body
FieldTipeWajibDeskripsi
conversation_idIntegerYaID percakapan/tiket
statusStringYaStatus baru: open, pending, resolved
curl -X POST "https://crm.dishubkotabaru.id/api/update_status" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": 84,
    "status": "resolved"
  }'
{
  "status": true,
  "message": "Status percakapan berhasil diperbarui."
}
POST /api/assign_agent Alihkan penugasan tiket aduan ke Agen CS lain
Parameter Body
FieldTipeWajibDeskripsi
conversation_idIntegerYaID aduan/percakapan
agent_idIntegerYaID Agen Petugas tujuan
curl -X POST "https://crm.dishubkotabaru.id/api/assign_agent" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": 84,
    "agent_id": 2
  }'
{
  "status": true,
  "message": "Tiket aduan berhasil dialihkan."
}
POST /api/add_internal_note Tambahkan catatan koordinasi internal petugas
Parameter Body
FieldTipeWajibDeskripsi
conversation_idIntegerYaID aduan/percakapan
noteStringYaTeks catatan internal koordinasi
usernameStringTidakNama author catatan (default: Agent)
curl -X POST "https://crm.dishubkotabaru.id/api/add_internal_note" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": 84,
    "note": "Warga melaporkan rambu lalu lintas roboh. Bidang Lalin tolong cek.",
    "username": "Super Admin"
  }'
{
  "status": true,
  "message": "Catatan internal berhasil ditambahkan.",
  "note_id": 48
}
GET /api/analytics Ambil statistik tiket aduan & evaluasi CSAT
Parameter Query (Opsional)
FieldTipeWajibDeskripsi
agent_idIntegerTidakSaring hasil statistik hanya untuk Agen CS tertentu
curl -X GET "https://crm.dishubkotabaru.id/api/analytics?agent_id=2" \
  -H "X-API-Key: API_KEY_REST_CRM_ANDA"
{
  "status": true,
  "data": {
    "total": 45,
    "open": 5,
    "pending": 12,
    "resolved": 28,
    "csat": {
      "average_rating": 4.62,
      "total_responses": 18,
      "ratings_distribution": {
        "1": 0,
        "2": 0,
        "3": 1,
        "4": 5,
        "5": 12
      }
    }
  }
}