WhatsApp API untuk Sistem Anda
Jepely WhatsApp API memungkinkan aplikasi, website, CRM, backend, atau sistem internal Anda mengirim dan menerima pesan WhatsApp melalui infrastruktur WhatsApp yang terhubung dengan Jepely.
Anda dapat menggunakan API untuk kebutuhan seperti notifikasi transaksi, OTP, informasi pelanggan, otomatisasi layanan, maupun integrasi dengan sistem yang sudah Anda miliki.
Endpoint
https://jepely.com/api/v1/messages/send
Cara kerjanya
Sistem Anda → Jepely → WhatsApp
Untuk pesan masuk, Anda juga dapat menggunakan Webhook Jepely:
WhatsApp → Jepely → Webhook Anda
API Key
Setiap request ke API membutuhkan API Key milik akun Anda. API Key digunakan untuk mengenali dan mengotorisasi sistem yang terhubung ke akun Jepely.
Jaga API Key Anda
Jangan menempatkan API Key di kode JavaScript yang dapat dilihat pengunjung atau membagikannya kepada pihak lain. Gunakan API Key dari sisi server/backend Anda.
HEADER YANG DIGUNAKAN
X-API-KEY: YOUR_API_KEY
1. Kirim Pesan Teks
POSTGunakan request ini ketika sistem Anda perlu mengirim pesan teks biasa ke pelanggan.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| to | string | Ya |
Nomor WhatsApp tujuan dalam format
internasional tanpa tanda +.
Contoh:
628123456789
|
| type | string | Ya |
Gunakan nilai text.
|
| message | string | Ya | Isi pesan yang ingin dikirim. |
curl -X POST https://jepely.com/api/v1/messages/send \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"type": "text",
"message": "Halo! Ini pesan dari sistem saya."
}'
3. Kirim Template dengan Parameter
POSTGunakan template WhatsApp yang sudah tersedia di akun WhatsApp Anda. Cara ini cocok untuk pesan seperti OTP, notifikasi pembayaran, status transaksi, atau pesan lain yang membutuhkan nilai dinamis.
Template harus sudah tersedia dan disetujui di WhatsApp Manager.
Nama template, bahasa, dan struktur komponennya harus sesuai dengan template yang Anda gunakan.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| to | string | Ya | Nomor WhatsApp tujuan. |
| type | string | Ya |
Gunakan nilai template.
|
| template_name | string | Ya | Nama template yang digunakan. |
| language | string | Opsional | Bahasa template. Jika tidak diberikan, API menggunakan konfigurasi default. |
| components | array | Opsional | Digunakan untuk mengirim nilai dinamis seperti kode OTP, nama, nominal, dan informasi lainnya sesuai komponen template. |
curl -X POST https://jepely.com/api/v1/messages/send \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"type": "template",
"template_name": "kode_otp",
"language": "id",
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "882910"
}
]
}
]
}'
4. Kirim Template Tanpa Parameter
POSTJika template yang Anda gunakan tidak memiliki variabel dinamis, Anda cukup mengirimkan nama template dan bahasa yang sesuai.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| to | string | Ya | Nomor WhatsApp tujuan. |
| type | string | Ya |
Gunakan template.
|
| template_name | string | Ya | Nama template yang digunakan. |
| language | string | Opsional | Bahasa template. |
curl -X POST https://jepely.com/api/v1/messages/send \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "628123456789",
"type": "template",
"template_name": "halo",
"language": "id"
}'
Memahami Respons API
Setelah mengirim request, API mengembalikan respons dalam
format JSON. Gunakan nilai success untuk
mengetahui apakah request berhasil diproses.
{
"success": true,
"message_id": "wamid.HBgLTYyODEyMzQ1Njc4O...",
"data": {
"messaging_product": "whatsapp",
"contacts": [
{
"input": "628123456789",
"wa_id": "628123456789"
}
],
"messages": [
{
"id": "wamid.HBgLTYyODEyMzQ1Njc4O..."
}
]
}
}
{
"success": false,
"message": "Layanan Jepely sedang tidak aktif atau sudah expired.",
"status": {
"service_active": false
}
}
Menerima Pesan dengan Webhook
INBOUNDJika Anda ingin memproses sendiri pesan WhatsApp yang masuk, Anda dapat menghubungkan endpoint Webhook milik sistem Anda ke Jepely.
Setelah Webhook berhasil diverifikasi, pesan WhatsApp yang masuk dapat diteruskan ke sistem Anda. Sistem Anda kemudian dapat menjalankan logic sendiri dan mengirim balasan melalui Jepely WhatsApp API.
Contoh alur integrasi
1. Pelanggan mengirim pesan WhatsApp
2. WhatsApp meneruskan pesan ke Jepely
3. Jepely mengirim data pesan ke Webhook Anda
4. Sistem Anda memproses pesan
5. Sistem Anda mengirim balasan melalui Jepely API
URL Webhook Anda
Gunakan URL HTTPS publik yang dapat menerima HTTP POST dengan body JSON.
Pastikan server Anda dapat menerima request dengan
cepat dan mengembalikan HTTP 200 OK.
Verifikasi Webhook
GETSebelum Webhook digunakan, endpoint Anda perlu diverifikasi. Jepely akan mengirim HTTP GET ke URL yang Anda daftarkan bersama beberapa parameter verifikasi.
Server Anda perlu memastikan bahwa
hub_verify_token sesuai dengan token yang Anda
gunakan. Jika benar, kembalikan nilai
hub_challenge.
| Parameter | Tipe | Keterangan |
|---|---|---|
| hub_mode | string |
Biasanya bernilai
subscribe.
|
| hub_verify_token | string | Token verifikasi yang Anda tentukan. |
| hub_challenge | string | Nilai yang harus dikembalikan jika token valid. |
<?php
define('VERIFY_TOKEN', 'verify_token');
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$mode = $_GET['hub_mode'] ?? '';
$token = $_GET['hub_verify_token'] ?? '';
$challenge = $_GET['hub_challenge'] ?? '';
if (
$mode === 'subscribe'
&& hash_equals(VERIFY_TOKEN, $token)
) {
http_response_code(200);
echo $challenge;
exit;
}
http_response_code(403);
echo 'Forbidden';
exit;
}
Keamanan Webhook
HMAC SHA-256Setiap payload yang dikirim ke Webhook Anda dilengkapi signature. Signature dapat digunakan untuk memastikan bahwa request yang diterima sesuai dengan payload yang dikirim oleh Jepely.
Periksa signature sebelum memproses data.
Signature dibuat menggunakan HMAC SHA-256 dari raw body
JSON. Secret yang digunakan adalah API Key Anda.
Format header:
sha256={hash_result}
<?php
define(
'JEPELY_API_KEY',
'YOUR_API_KEY'
);
$rawPayload = file_get_contents(
'php://input'
);
$headers = array_change_key_case(
getallheaders(),
CASE_LOWER
);
$receivedSignature =
$headers['x-jepely-signature']
?? ($_SERVER['HTTP_X_JEPELY_SIGNATURE'] ?? '');
$expectedSignature =
'sha256=' .
hash_hmac(
'sha256',
$rawPayload,
JEPELY_API_KEY
);
if (
!hash_equals(
$expectedSignature,
$receivedSignature
)
) {
http_response_code(401);
echo json_encode([
'status' => 'error',
'message' => 'Invalid signature'
]);
exit;
}
Data Pesan yang Diterima
Ketika pelanggan mengirim pesan WhatsApp, Webhook Anda akan menerima HTTP POST dengan body JSON seperti berikut.
{
"event": "message.received",
"timestamp": 1776681600,
"platform": "whatsapp",
"data": {
"conversation_id": 1042,
"message_id": "wamid.HBgLMTIzNDU2Nzg5...",
"sender": {
"id": "6281234567890",
"name": "Budi Santoso"
},
"recipient": {
"phone_number_id": "109876543210"
},
"message": {
"type": "text",
"text": "Halo, saya ingin bertanya."
},
"session": {
"is_human_takeover": false
},
"created_at": "2026-04-20 18:00:00",
"raw": {
"from": "6281234567890",
"id": "wamid.HBgLMTIzNDU2Nzg5...",
"timestamp": "1776681600",
"text": {
"body": "Halo, saya ingin bertanya."
},
"type": "text"
}
}
}
| Field | Keterangan |
|---|---|
| event |
Jenis event. Untuk pesan masuk:
message.received.
|
| conversation_id | ID percakapan di CRM Jepely. |
| message_id | ID pesan dari WhatsApp. |
| sender | Informasi pengirim pesan. |
| message | Informasi pesan yang diterima. |
| session | Informasi status percakapan, termasuk apakah sedang berada dalam mode human takeover. |
| raw | Data asli pesan WhatsApp yang diterima Jepely. Field ini dapat digunakan jika sistem Anda membutuhkan metadata tambahan. |