Whatsapp API (Baileys)

Mulai dari sini untuk menghubungkan nomor WhatsApp dan mendapatkan token.


Dokumentasi API

Format request/response API ini mengikuti gaya Fonnte: token dikirim lewat header Authorization (tanpa awalan "Bearer"), dan tiap nomor WhatsApp punya token sendiri.

1. Kirim Pesan

Kirim pesan teks ke satu atau beberapa nomor tujuan.

POSTsend
curl -X POST send \
  -H "Authorization: TOKEN_NOMOR_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
        "target": "6285226061579,6281234567890",
        "message": "Halo, ini pesan tes"
      }'
Parameter:
Header Authorization Required Token milik nomor pengirim (didapat dari halaman /device setelah scan QR)
target Required Nomor tujuan, gunakan kode negara. Beberapa nomor dipisah koma. Contoh: 6281223xxxx,6281223yyyy
message Required Isi pesan teks

Contoh response sukses:

{
  "status": true,
  "detail": "success! message sent",
  "device": "6285640431181",
  "results": [
    { "target": "6285226061579", "status": true, "id": "3EB0XXXXXXXXXXXXXXXX" }
  ]
}

Contoh response gagal (token salah):

{
  "status": false,
  "reason": "invalid token"
}

2. Kirim Media

Kirim gambar/video/audio/dokumen ke satu atau beberapa nomor tujuan — dari URL publik, atau upload file langsung.

POSTsend-media

Cara 1 — dari URL:

curl -X POST send-media \
  -H "Authorization: TOKEN_NOMOR_ANDA" \
  -H "Content-Type: application/json" \
  -d '{
        "target": "6285226061579",
        "url": "https://situs-anda.com/gambar.jpg",
        "caption": "Ini fotonya",
        "type": "image"
      }'

Cara 2 — upload file langsung (multipart/form-data):

curl -X POST send-media \
  -H "Authorization: TOKEN_NOMOR_ANDA" \
  -F "target=6285226061579" \
  -F "caption=Ini fotonya" \
  -F "type=image" \
  -F "file=@/path/ke/gambar.jpg"
Parameter:
Header Authorization Required Token milik nomor pengirim
target Required Nomor tujuan, beberapa nomor dipisah koma
url Required jika file tidak dikirim Link media publik, akan diunduh dulu oleh server
file Required jika url tidak dikirim File media, dikirim langsung sebagai multipart/form-data (field name file). Kalau keduanya dikirim, file yang dipakai.
type Optional image, video, audio, atau document — kalau tidak diisi, dideteksi otomatis dari Content-Type
filename Optional Nama file, dipakai untuk dokumen (upload langsung memakai nama file asli kalau tidak diisi)
caption Optional Tidak berlaku untuk audio

Tidak ada batasan ukuran file secara default (bisa diatur lewat env MAX_MEDIA_MB di server kalau perlu).


3. Atur Webhook (terima pesan masuk)

Setiap kali nomor ini menerima pesan baru dari orang lain, aplikasi akan mem-forward (POST) data pesan tersebut ke URL webhook yang Anda daftarkan.

POSTwebhook
curl -X POST webhook \
  -H "Authorization: TOKEN_NOMOR_ANDA" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://situs-anda.com/endpoint-webhook" }'

Kirim "url": "" (string kosong) untuk menonaktifkan webhook.

Cek konfigurasi webhook saat ini:

GETwebhook
curl webhook \
  -H "Authorization: TOKEN_NOMOR_ANDA"
Payload yang dikirim ke webhook Anda saat ada pesan masuk:
{
  "device": "6285640431181",
  "sender": "6281234567890",
  "member": null,
  "name": "Nama Pengirim",
  "message": "isi pesan dari lawan chat",
  "isGroup": false,
  "id": "3EB0XXXXXXXXXXXXXXXX",
  "timestamp": 1700000000
}

Catatan: member hanya terisi kalau pesan berasal dari grup (berisi nomor pengirim di dalam grup tersebut). Saat ini hanya pesan berupa teks (termasuk caption gambar/video, dan balasan tombol/list) yang diteruskan.

Pesan dari grup WhatsApp diabaikan secara default — tidak diteruskan ke webhook sama sekali (bisa diaktifkan lewat env IGNORE_GROUP_MESSAGES=false di server).