Dokumentasi API Integrasi
Developer HubHubungkan 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.
Daftar Konten
Simulator Chatbot WA 1. Autentikasi & Base URLWhatsApp Gateway API
POST Send Message GET Device StatusCRM Integration API
POST Send WA & Log POST Register OutreachCRM REST API
GET Contacts List GET Conversations GET Messages List POST Reply Ticket POST Update Status POST Assign Agent POST Add Internal Note GET Analytics & CSAT1. 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_ANDAAPI 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_ANDABase URL Server CRM Anda
Kirim pesan WhatsApp biasa atau media (gambar, dokumen, video, audio) secara programatis melalui perangkat yang terhubung.
Header Autentikasi
| Header | Tipe | Wajib | Deskripsi |
|---|---|---|---|
Authorization | String | Ya | Format: Bearer TOKEN_GATEWAY_DEVICE_ANDA |
Content-Type | String | Ya | Harus berupa application/json |
Parameter Body (JSON)
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
to | String | Ya | Nomor WhatsApp tujuan (contoh: 6281234567890) |
type | String | Tidak | Tipe pesan: text (default), media, image, video, audio, document |
message | String | Ya* | Isi teks pesan (wajib jika type = text. Mendukung spintax) |
media_url | String | Ya* | 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"
}
}
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"
}
}
}
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
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
api_key | String | Ya | API Key REST CRM Anda (atau kirim via Header X-API-Key) |
phone | String | Ya | Nomor WhatsApp penerima (format 62812xxx atau 0812xxx) |
message | String | Ya | Isi pesan teks yang dikirim |
source | String | Tidak | Nama 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."
}
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
}
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"
}
]
}
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"
}
]
}
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"
}
]
}
Parameter Body
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
conversation_id | Integer | Ya | ID percakapan aktif |
message | String | Ya | Isi 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."
}
Parameter Body
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
conversation_id | Integer | Ya | ID percakapan/tiket |
status | String | Ya | Status 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."
}
Parameter Body
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
conversation_id | Integer | Ya | ID aduan/percakapan |
agent_id | Integer | Ya | ID 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."
}
Parameter Body
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
conversation_id | Integer | Ya | ID aduan/percakapan |
note | String | Ya | Teks catatan internal koordinasi |
username | String | Tidak | Nama 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
}
Parameter Query (Opsional)
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
agent_id | Integer | Tidak | Saring 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
}
}
}
}