API Akun WhatsApp
Hubungkan nomor WhatsApp (API)
Mulai hubungkan nomor WhatsApp ke workspace Anda dari aplikasi Anda sendiri. Wbiztool membuka sesi WhatsApp baru dan mengirim kode QR, atau dengan login_method=phone sebuah kode 8 karakter, ke URL webhook Anda. Tampilkan kode tersebut kepada pemilik ponsel, lalu mereka memindai kode QR atau mengetik kode di WhatsApp, dan nomor tersebut siap mengirim pesan. Dengan kode QR, Anda tidak perlu mengetahui nomornya terlebih dahulu: Wbiztool membacanya dari WhatsApp setelah pemindaian dan mengirimkannya ke webhook Anda.
Ingin menautkan nomor Anda sendiri secara manual? Ikuti Hubungkan nomor WhatsApp Anda.
https://wbiztool.com/api/v1/whatsapp/connect/Body: JSON atau field formulir
POST /api/v1/whatsapp-client/create/ adalah alias yang identik: menjalankan kode yang sama dan mengembalikan respons yang sama. Kedua path tetap berfungsi.
Cara kerja koneksi#
Panggilan API hanya memulai koneksi. Kode QR atau kode telepon tiba kemudian, di URL webhook Anda.
Panggil API connect
Kirim
webhook_urlAnda, ditambahwhatsapp_numberdenganlogin_method=phone. Untuk menghubungkan kembali nomor yang sudah pernah Anda tambahkan, kirim jugawhatsapp_client_id-nya. Respons memberi Andawhatsapp_client_id. Simpan ID tersebut.Terima kode QR atau kode telepon
Dengan
login_method=qrdefault, webhook Anda menerimastatus=qr_generateddengan gambar QR diqr_image. Kode QR dikirim ulang setiap beberapa detik selama Wbiztool menunggu pemindaian, jadi selalu tampilkan yang terbaru. Orang tersebut memiliki waktu sekitar dua menit untuk memindai.Dengan
login_method=phone, webhook Anda menerimastatus=pairing_codedengan kode 8 karakter dipairing_code, misalnyaK5EWPGY5. Kode ini dikirim sekali dan berlaku sekitar tiga menit.Tampilkan gambar atau kode tersebut kepada pemilik ponsel. Jika tidak digunakan tepat waktu, atau WhatsApp meminta memuat ulang kode, Anda menerima
not_connected; panggil API lagi untuk mendapatkan kode baru.Tautkan ponsel
Di ponsel, buka WhatsApp → Linked devices (Perangkat tertaut) → Link a device (Tautkan perangkat). Pindai kode QR, atau ketuk Link with phone number instead (Tautkan dengan nomor telepon saja) lalu ketik kode 8 karakter.
Dapatkan hasilnya
Webhook Anda menerima
status=connecteddengan nomor yang tertaut diwhatsapp_numbersaat nomor berhasil ditautkan, ataustatus=not_connectedjika kode tidak dipindai tepat waktu atau koneksi gagal. Eventconnectedbisa tiba beberapa detik sebelum Status koneksi mengembalikanConnected. Balas webhook terlebih dahulu, lalu lakukan polling ke Status koneksi setiap beberapa detik hingga satu menit. Jangan memeriksanya sekali saja dari dalam handler webhook Anda.
Contoh singkat#
curl -X POST https://wbiztool.com/api/v1/whatsapp/connect/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/whatsapp/connect/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
},
timeout=30,
)
result = response.json() # read the body even when the HTTP code is 400 or 403
if result.get("status") == 1:
print("Waiting for QR code, whatsapp_client_id", result["whatsapp_client_id"])
else:
print("Failed:", result.get("message"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/whatsapp/connect/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
webhook_url: "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400 or 403
if (result.status === 1) {
console.log("Waiting for QR code, whatsapp_client_id", result.whatsapp_client_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'webhook_url' => 'https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET',
];
$ch = curl_init('https://wbiztool.com/api/v1/whatsapp/connect/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Waiting for QR code, whatsapp_client_id ' . $result['whatsapp_client_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}Ganti 12345 dan YOUR_API_KEY dengan nilai Anda sendiri. Lihat Autentikasi untuk mengetahui di mana menemukannya. Untuk mendapatkan kode telepon, tambahkan "login_method": "phone" dan "whatsapp_number": "919876543210".
Parameter request#
client_idintegerwajibAPI Client ID Anda dari Settings → API keys (Pengaturan → Kunci API).
api_keystringwajibAPI key Anda dari halaman yang sama. Nomor ditambahkan ke workspace tempat key ini dibuat.
whatsapp_numberstringHanya dengan login_method=phoneDengan
login_method=phone, nomor internasional lengkap yang akan dikirimi kode, karena WhatsApp mengirimkan kode tepat ke nomor tersebut: kode negara di depan, tanpa awalan0, misalnya919876543210.+, spasi, dan tanda hubung otomatis dihapus.Dengan
login_method=qr, parameter ini diabaikan dan boleh tidak dikirim. Wbiztool menyimpan nomor yang dilaporkan WhatsApp setelah pemindaian dan mengirimkannya di webhookconnected.login_methodstringopsionalqr(default) untuk menerima kode QR, atauphoneuntuk menerima kode 8 karakter yang diketik pemilik di WhatsApp melalui Link with phone number instead (Tautkan dengan nomor telepon saja). Berguna jika ponsel tidak bisa memindai kode QR, misalnya jika ponsel tersebut satu-satunya perangkat.whatsapp_client_idintegeropsionalUntuk menghubungkan kembali nomor yang ada di workspace Anda tetapi tidak terhubung, kirim
whatsapp_client_id-nya. ID yang sama tetap dipakai, sehingga panggilan API Anda yang lain tetap berfungsi. Hilangkan untuk menambahkan nomor baru.Baris tersebut mengambil nomor mana pun yang ditautkan. Jika ponsel lain memindai kode QR, atau Anda mengirim
whatsapp_numberyang berbeda denganlogin_method=phone,whatsapp_client_idtersebut mengirim dari nomor baru sejak saat itu, termasuk pesan yang sudah dalam antrean untuknya.webhook_urlstringWajib untuk menerima kode QRURL
httpatauhttpsAnda yang menerima kode QR dan update koneksi, hingga 250 karakter (URL yang lebih panjang gagal dengan HTTP500). API menerima request tanpa parameter ini, tetapi tidak ada yang dikirimkan kepada Anda dan Anda tidak punya cara untuk mendapatkan kode QR melalui API. Lihat Event webhook.
Menggunakan klien resmi#
Klien Python memanggil /api/v1/whatsapp-client/create/ untuk Anda. Klien ini meminta whatsapp_number; dengan kode QR, nilainya diabaikan.
from wbiztool_client import WbizToolClient
client = WbizToolClient(api_key="YOUR_API_KEY", client_id=12345)
result = client.create_whatsapp_client(
whatsapp_number="919876543210",
webhook_url="https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
)
print(result)Klien Python memunculkan requests.exceptions.HTTPError ketika API mengembalikan HTTP 400 atau 403, jadi bungkus panggilan dengan try/except.
Respons#
Saat request koneksi dibuat, API mengembalikan HTTP 200:
{
"message": "Whatsapp Client Created",
"whatsapp_client_id": 678,
"login_method": "qr",
"status": 1
}
| Field | Tipe | Deskripsi |
|---|---|---|
status | integer | 1 jika request koneksi dibuat, 0 jika gagal. |
message | string | Whatsapp Client Created jika berhasil, selain itu berisi error. |
whatsapp_client_id | integer | ID nomor WhatsApp. Gunakan sebagai whatsapp_client di panggilan API lainnya. Hanya ada jika berhasil. |
login_method | string | qr atau phone, sesuai yang digunakan untuk percobaan ini. Hanya ada jika berhasil. |
"status": 1 berarti request sudah dibuat, belum berarti nomor sudah terhubung. Memanggil API lagi tidak menumpuk nomor:
- Dengan kode QR dan tanpa
whatsapp_client_id, Anda mendapatkanwhatsapp_client_idyang sama sampai salah satu kode QR-nya dipindai. - Dengan
login_method=phone, nomor yang sudah pernah ditambahkan tetapi tidak terhubung mendapatkan kembaliwhatsapp_client_idyang sudah ada. - Dengan
whatsapp_client_id, nomor tersebut dihubungkan kembali.
Sampai kode QR pertamanya dipindai, nomor tersebut belum memiliki nomor telepon: Daftar nomor terhubung dan Status koneksi mengembalikan nomor kosong untuknya.
Error#
| Pesan | HTTP | Cara memperbaikinya |
|---|---|---|
login_method must be 'qr' or 'phone' | 400 | Kirim qr, phone, atau hilangkan parameter ini. |
For login_method phone, whatsapp_number must be the full international number with country code and no leading 0, e.g. 919876543210 | 400 | Kirim nomor dengan kode negaranya, misalnya 919876543210, bukan 09876543210 atau 9876543210. |
Auth Error | 200 | Kirim client_id dan api_key. Juga dikembalikan jika body JSON tidak valid. |
Invalid Client Id | 403 | Kirim client_id sebagai bilangan bulat, misalnya 12345. |
Auth Error: invalid api key | 400 | Pastikan key tersebut ada, belum dihapus, dan milik client_id ini. |
Higher Subscription Required | 200 | Paket Anda tidak mencakup API ini. Upgrade paket Anda. |
WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit | 200 | Jumlah nomor terhubung Anda sudah mencapai batas paket. Putuskan salah satu nomor atau upgrade. |
Already Connected With Given Number | 200 | Dengan login_method=phone, nomor ini sudah terhubung di workspace ini. Dengan whatsapp_client_id, nomor tersebut sudah terhubung. Tidak ada yang perlu dilakukan. Jika Anda sudah mencapai batas jumlah nomor di paket Anda, Anda mendapatkan WhatsApp Account Limit Reached sebagai gantinya. |
Invalid WhatsApp client | 400 | whatsapp_client_id tidak ada, sudah dihapus, atau milik workspace lain. Hilangkan untuk menambahkan nomor baru. |
Request yang bukan POST mengembalikan objek kosong {} dengan HTTP 200.
Event webhook#
Wbiztool mengirim POST ke webhook_url Anda di setiap langkah. Body-nya dienkode sebagai formulir (application/x-www-form-urlencoded), bukan JSON.
Kode QR siap (dikirim ulang setiap beberapa detik selama menunggu pemindaian, sering kali dengan URL yang sama):
status=qr_generated&whatsapp_client_id=678&qr_image=...
Kode telepon siap (dengan login_method=phone, dikirim sekali):
status=pairing_code&whatsapp_client_id=678&pairing_code=K5EWPGY5
Nomor terhubung, dengan nomor yang login, seperti yang dilaporkan WhatsApp:
status=connected&whatsapp_client_id=678&whatsapp_number=919876543210
Koneksi gagal, misalnya karena kode QR tidak dipindai atau kode telepon tidak dimasukkan tepat waktu:
status=not_connected&whatsapp_client_id=678
| Field | Nilai |
|---|---|
status | qr_generated, pairing_code, connected, atau not_connected |
whatsapp_client_id | whatsapp_client_id yang dikembalikan oleh API. |
whatsapp_number | Hanya dengan connected. Nomor yang tertaut beserta kode negaranya, misalnya 919876543210. Gunakan untuk mengetahui nomor mana yang dipindai. Kosong dalam kasus langka ketika WhatsApp tidak melaporkannya. |
pairing_code | Hanya dengan pairing_code. Kode 8 karakter untuk diketik di WhatsApp. Tampilkan apa adanya; spasi atau tanda hubung di antara kedua bagian tidak masalah. |
qr_image | Hanya dengan qr_generated. Berupa URL data: yang berisi gambar dalam base64, atau URL https dari gambar. Tangani keduanya. URL https tetap sama untuk setiap pembaruan pada nomor yang sama, sementara gambar di baliknya berubah. Tambahkan query cache-busting saat menampilkannya (misalnya ?t=<timestamp>), atau browser mungkin terus menampilkan kode yang sudah kedaluwarsa. |
URL Anda harus dapat dijangkau secara publik dan sebaiknya merespons dalam beberapa detik. Wbiztool menunggu balasan Anda hingga 10 detik; jika server Anda lambat atau tidak dapat dijangkau, event tersebut hilang tetapi percobaan koneksi tetap berjalan. Kode status HTTP apa pun diterima. Pengiriman yang gagal tidak dicoba ulang, dan tidak ada yang dikirim jika nomor terputus di kemudian hari. Untuk memantau nomor setelah terhubung, lakukan polling ke Status koneksi.
Polling sebagai ganti webhook#
Jika server Anda tidak dapat menerima webhook, Anda tetap memerlukan webhook untuk mendapatkan kode QR, tetapi Anda tidak harus mengandalkannya untuk hasilnya. Setelah kode QR dipindai, panggil Status koneksi dengan whatsapp_client_id setiap beberapa detik sampai mengembalikan Connected. Daftar akun menampilkan hal yang sama untuk semua nomor Anda.
Tips#
- Tangani event duplikat: pastikan handler Anda aman dijalankan lebih dari sekali, untuk berjaga-jaga jika sebuah event terkirim dua kali.
- Tampilkan kode QR terbaru: ganti gambar setiap kali event
qr_generatedbaru tiba, dengan menambahkan query cache-busting ke URLhttps. Kode yang lebih lama berhenti berfungsi. - Pindai dalam sekitar dua menit: setelah itu Anda menerima
not_connected. Panggil API lagi untuk kode baru. - Periksa nomor setelah pemindaian QR:
whatsapp_numberdi eventconnectedadalah nomor yang benar-benar ditautkan, yang mungkin berbeda dari yang Anda harapkan. - Masukkan kode telepon dalam sekitar tiga menit: setiap percobaan memberikan satu kode. Jika kedaluwarsa, Anda menerima
not_connected; panggil API lagi. - Tidak ada kode QR atau kode telepon setelah 10 menit? Request sudah kedaluwarsa. Panggil API lagi.
- Menghubungkan dari dashboard lebih sederhana jika Anda menautkan nomor Anda sendiri. Gunakan WhatsApp settings dan pindai kode di sana.
