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

POST

Gunakan 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."
  }'

2. Kirim Tombol Interaktif

POST

Gunakan tombol interaktif jika Anda ingin memberikan beberapa pilihan yang dapat langsung dipilih pelanggan di WhatsApp.

Maksimal 3 tombol reply.

Parameter Tipe Wajib Keterangan
to string Ya Nomor tujuan format internasional.
type string Ya Gunakan button atau interactive.
message string Ya Teks yang ditampilkan bersama tombol.
buttons array Ya Daftar tombol reply. Maksimal 3 tombol.
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": "button",
    "message": "Bagaimana kami dapat membantu Anda?",
    "buttons": [
      {
        "type": "reply",
        "reply": {
          "id": "CHAT_ADMIN",
          "title": "Chat Admin"
        }
      },
      {
        "type": "reply",
        "reply": {
          "id": "CHAT_AI",
          "title": "Chat AI"
        }
      }
    ]
  }'

3. Kirim Template dengan Parameter

POST

Gunakan 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

POST

Jika 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.

Berhasil — HTTP 200
{
  "success": true,
  "message_id": "wamid.HBgLTYyODEyMzQ1Njc4O...",
  "data": {
    "messaging_product": "whatsapp",
    "contacts": [
      {
        "input": "628123456789",
        "wa_id": "628123456789"
      }
    ],
    "messages": [
      {
        "id": "wamid.HBgLTYyODEyMzQ1Njc4O..."
      }
    ]
  }
}
Gagal — HTTP 4xx
{
  "success": false,
  "message": "Layanan Jepely sedang tidak aktif atau sudah expired.",
  "status": {
    "service_active": false
  }
}

Menerima Pesan dengan Webhook

INBOUND

Jika 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

GET

Sebelum 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.
Contoh PHP PHP
<?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-256

Setiap 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}

Validasi Signature dengan PHP PHP
<?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.

message.received application/json
{
  "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.