Dokumentasi - Mengirim Pesan

Endpoint API

URL: https://api.wavave.com/v1/send

Method: POST

Contoh Kode

<?php
header('Content-Type: application/json; charset=utf-8');

$data = json_encode(array(
    'to' => '62812345678',
    'message' => 'Halo ini adalah pesan test',
    'from' => '62812345678',
    'Type' => 'text', // text atau media
    'url' => 'https://api.wavave.com/sampel.png',
    'callbackStatus' => 'https://api.wavave.com/callback.php',
    'typing' => true,
    'delay' => 5
));

// Endpoint Api
$endpoint = 'https://api.wavave.com/v1/send';

$ch = curl_init($endpoint);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data),
    'Authorization: Bearer YOUR_API_KEY'
));

$response = curl_exec($ch);

if($response === FALSE){
    die(curl_error($ch));
}

curl_close($ch);
echo $response;

                        
const axios = require('axios');

const data = {
    to: '62812345678',
    message: 'Halo ini adalah pesan test',
    from: '62812345678',
    Type: 'text', // text atau media
    url: 'https://api.wavave.com/sampel.png',
    callbackStatus: 'https://api.wavave.com/callback.php',
    typing: true,
    delay: 5
};

axios.post('https://api.wavave.com/v1/send', data, {
    headers: {
        'Content-Type': 'application/json',
        'Authorization: 'Bearer YOUR_API_KEY'
    }
})
.then(response => {
    console.log(response.data);
})
.catch(error => {
    console.error(error);
});
                        
import requests
import json

url = 'https://api.wavave.com/v1/send'

data = {
    'to': '62812345678',
    'message': 'Halo ini adalah pesan test',
    'from': '62812345678',
    'Type': 'text', // text atau media
    'url': 'https://api.wavave.com/sampel.png',
    'callbackStatus': 'https://api.wavave.com/callback.php',
    'typing': true,
    'delay': 5
}

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
}

response = requests.post(url, data=json.dumps(data), headers=headers)

print(response.json())
                        
curl -X POST https://api.wavave.com/v1/send \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
        "to": "62812345678",
        "message": "Halo ini adalah pesan test",
        "from": "62812345678",
        "Type": "text",
        "url": "https://api.wavave.com/sampel.png",
        "callbackStatus": "https://api.wavave.com/callback.php",
        "typing": true,
        "delay": 5
    }'
                        

Parameter

Parameter Tipe Deskripsi
from Number Nomor whatsapp pengirim dalam format internasional
to Number Nomor telepon penerima dalam format internasional (misalnya: 62812345678)
message String Isi pesan yang akan dikirim
Type String 'text' atau 'media'
url String Anda harus menyertakan url media yang dapat diakses secara publik jika memilih Type = media
callbackStatus String URL endpoint yang digunakan untuk menerima status pengiriman pesan melalui callback, harus berupa URL https yang dapat diakses secara publik, CallbackStatus adalah mekanisme callback yang memungkinkan sistem mengirimkan notifikasi secara real time terkait status pengiriman pesan, Saat pesan anda terkirim—baik berhasil maupun gagal—sistem akan mengirimkan notifikasi yang mencakup detail seperti ID pesan, tipe pesan, status pengiriman, dan informasi relevan lainnya ke URL callback anda.
typing Boolean typing adalah cara sistem membuat akun whatsapp anda seolah olah sedang mengetik pesan sebelum dikirim ke pengguna (target) Nilainya true atau false
delay String Nilai delay antara 1 hingga 18000 jika dikosongkan nilai defaultnya adalah 1 yang berarti pesan anda akan dikirim dalam 1 detik, atau anda bisa menggunakan nilai random untuk membuat delay acak secara otomatis oleh sistem.
Contoh menggunakan delay
'delay' => 5
'delay' => 'random'

Response Success


{
    "success": true,
    "message": "Success",
    "data": {
        "status": "pending",
        "requestId": "8e212d3d-de11-4e58-a037-e2bde22a697d",
        "to": "62812345678",
        "code": 200
    }
}

Response error

Success Message Status Code
false Gagal mengirim pesan error 500
false Jenis file tidak didukung invalid 415
false Invalid json format invalid 400
false Url media harus diberikan invalid 400
false Pesan tidak boleh kosong invalid 400
false Api key tidak valid failed 401
false Perangkat disconnect disconnect 503
false Nomor pengirim tidak valid Invalid 400
false Jenis pesan tidak didukung Invalid 400
false Masa berlaku habis expired 403
false Anda telah melebihi batas permintaan throttled 429
false Ukuran file melebihi batas maksimum Invalid 413

Tangani status pesan yang anda kirim

Salin kode dibawah dan simpan di server anda dengan nama file misalnya callback.php atau webhook.php dan pastikan situs anda mendukung Https

callback ini akan menerima payload dari sistem kami secara real time untuk melacak status pesan yang anda kirim.
         
<?php
header('Content-Type: application/json; charset=utf-8');

try {
    
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);

    $logFile = 'callback.log';
    if (!file_exists($logFile)) {
        file_put_contents($logFile, "===== callback Log Created: " . date('Y-m-d H:i:s') . " =====" . PHP_EOL);
    }

    if ($data) {
        $device = $data['device'] ?? '';
        $requestId = $data['requestId'] ?? '';
        $campaignId = $data['campaignId'] ?? '';
        $type = $data['type'] ?? '';
        $messageid = $data['messageid'] ?? '';
        $status = $data['status'] ?? '';
        $to = $data['to'] ?? '';
        $code = $data['code'] ?? '';
        $details = $data['details'] ?? '';
        
        
        $messagebody = json_encode($messagebody, JSON_UNESCAPED_UNICODE);

        $logData = [
            'timestamp' => date('Y-m-d H:i:s'),
            'device' => $device,
            'requestId' => $requestId,
            'campaignId' => $campaignId,
            'type' => $type,
            'messageid' => $messageid,
            'status' => $status,
            'to' => $to,
            'code' => $code,
            'details' => $details
        ];

        file_put_contents($logFile, json_encode($logData, JSON_PRETTY_PRINT) . PHP_EOL, FILE_APPEND);
        echo json_encode(['status' => 'success', 'message' => 'Log saved']);
    } else {
        echo json_encode(['status' => 'error', 'message' => 'No data received']);
    }
} catch (Exception $e) {
    file_put_contents('ErrorCallback.log', date('Y-m-d H:i:s') . " - Error: " . $e->getMessage() . PHP_EOL, FILE_APPEND);
    echo json_encode(['status' => 'error', 'message' => 'An error occurred']);
}
    

Contoh payload

Anda akan menerima data secara real time dari sistem kami ketika pesan yang anda kirim berhasil ataupun gagal, berikut payload yang akan diterima oleh callback atau webhook anda.


{
    "device": "62812345678",
    "requestId": "8e212d3d-de11-4e58-a037-e2bde22a697d",
    "campaignId": "6b64e65e-9290-4322-764D-2bead9e53268",
    "type": "text",
    "messageid": "3EB08AB7397BD419A90985",
    "status": "sent",
    "to": "62812345678",
    "code": 200,
    "details": "Pesan terkirim"
}

Parameter

Properti Nilai Deskripsi
device Number Perangkat anda yang terhubung dengan Wa Vave dalam format internasional : 628123456789
requestId String ID unik untuk melacak permintaan yang sebelumnya anda kirim melalui API
campaignId String ID unik dari kampanye yang anda kirim melalui dashboard aplikasi
type String Jenis pesan yang anda kirim baik melalui dashboard aplikasi ataupun API
messageid String ID pesan unik yang bisa anda simpan di aplikasi anda
status String sent: Pesan anda berhasil terkirim
failed: Pesan anda tidak terkirim
to Number Nomor whatsapp yang menerima pesan dari anda
code Number 200, 1001, 1002, 1003

200: Pesan berhasil terkirim
1001: Nomor target tidak terdaftar di whatsapp
1002: Nomor target tidak valid
1003: Mime tipe tidak diizinkan
details String Detail lengkap tentang status pesan yang anda kirim

Jenis MIME yang didukung

Sistem kami mengikuti standar whatsapp api official yang hanya mengizinkan mime tipe jenis berikut.


    'text/vcard',
    'text/x-vcard',
    'text/csv',
    'text/rtf',
    'text/richtext',
    'text/calendar',
    'text/directory',
    'application/pdf',
    'application/vcard',
    'application/msword',
    'application/vnd.ms-excel',
    'application/vnd.ms-powerpoint',
    'application/vnd.apple.pkpass',
    'application/vnd.openxmlformats-officedocument.presentationml.presentation',
    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    'image/jpeg',
    'image/jpg',
    'image/gif',
    'image/png',
    'image/webp',
    'image/bmp',
    'image/tiff',
    'audio/basic',
    'audio/L24',
    'audio/mp4',
    'audio/mpeg',
    'audio/ogg',
    'audio/aac',
    'audio/vnd.rn-realaudio',
    'audio/ogg; codecs=opus',
    'audio/vnd.wave',
    'audio/3gpp',
    'audio/3gpp2',
    'audio/ac3',
    'audio/webm',
    'audio/amr-nb',
    'audio/amr',
    'video/mpeg4', 
    'video/mp4', 
    'video/mpeg', 
    'video/webm',
    'video/quicktime', 
    'video/3gpp', 
    'video/3gpp2', 
    'video/3gpp-tt',
    'video/H261', 
    'video/H263', 
    'video/H263-1998', 
    'video/H263-2000',
    'video/H264', 
    'video/H265'