Kirim pesan WhatsApp dengan Node.js
Kirim teks, gambar, dan file WhatsApp dari aplikasi Node.js Anda, dari nomor Anda sendiri yang ditautkan ke WbizTool seperti WhatsApp Web. Gunakan paket resmi wbiztool-client atau fetch bawaan Node.js 18 ke atas.
Uji coba gratis: 50 pesan dalam 30 hari mana pun, tanpa kartu.
Cara kerjanya
Dapatkan kunci API dan tautkan nomor Anda
Daftar, lalu tautkan nomor WhatsApp Anda di halaman Nomor WhatsApp dengan kode QR atau kode penautan, seperti WhatsApp Web. Di Pengaturan → Kunci API, buat kunci dan salin Client ID Anda (panduan Kunci API di bawah menunjukkan letaknya). ID di kartu nomor (seperti ID 678) adalah
whatsapp_clientAnda.Instal client, atau gunakan fetch
Jalankan
npm install wbiztool-clientuntuk client resmi. Atau panggil API dengan fetch, yang tidak memerlukan paket di Node.js 18 ke atas.Kirim pesannya
POST kredensial Anda, nomor telepon, dan teksnya ke
https://wbiztool.com/api/v1/send_msg/. Balasan dengan"status": 1danmsg_idberarti pesan sudah masuk antrean di nomor Anda.Pastikan pesan terkirim
Sertakan URL
webhookuntuk diberi tahu saat pesan terkirim atau gagal, atau tanyakan ke endpoint Status pesan denganmsg_id.
Contoh kode Node.js
npm install wbiztool-clientconst { WbizToolClient } = require("wbiztool-client");
const client = new WbizToolClient({
clientId: 12345,
apiKey: "YOUR_API_KEY",
whatsappClient: 678,
});
(async () => {
// Errors throw, with the API's response in the error message.
const result = await client.sendMessage({
phone: "9876543210",
countryCode: "91",
message: "Hi Aman, your order #4821 has shipped.",
});
console.log(result);
})().catch(console.error);// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/send_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
country_code: "91",
phone: "9876543210",
msg: "Hi Aman, your order #4821 has shipped and will arrive on Thursday.",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Queued with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message);
}{"status": 1, "message": "Created", "msg_id": 9817263}// Node.js 20+ (built-in fetch, FormData and fs.openAsBlob). Save as .mjs to use top-level await.
import { openAsBlob } from "node:fs";
const form = new FormData();
form.append("client_id", "12345");
form.append("api_key", "YOUR_API_KEY");
form.append("whatsapp_client", "678");
form.append("msg_type", "2");
form.append("country_code", "91");
form.append("phone", "9876543210");
form.append("msg", "Your invoice for order #4821 is attached.");
form.append("file_name", "invoice-4821.pdf");
form.append("file", await openAsBlob("./invoice-4821.pdf"), "invoice-4821.pdf");
// Don't set Content-Type yourself; fetch adds the multipart boundary.
const response = await fetch("https://wbiztool.com/api/v1/send_msg/", { method: "POST", body: form });
console.log(await response.json());// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const msgId = 9817263;
const response = await fetch(`https://wbiztool.com/api/v1/message/status/${msgId}/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.message === "Unknown message id") {
console.log("No message with this ID in your workspace");
} else if (!("status_text" in result)) {
console.error("Request failed:", result.message ?? "no message in response");
} else if (result.status === 1) {
console.log("Sent");
} else if (result.status === 2) {
console.log("Failed:", result.error);
} else {
console.log("Status:", result.status_text);
}// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const tz = "Asia/Kolkata";
const sendAt = new Date(Date.now() + 2 * 60 * 60 * 1000); // two hours from now
// Format the date and time in the timezone you send, not your server's.
const date = new Intl.DateTimeFormat("en-GB", { timeZone: tz, day: "2-digit", month: "2-digit", year: "numeric" }).format(sendAt); // "24/12/2026"
const time = new Intl.DateTimeFormat("en-GB", { timeZone: tz, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(sendAt); // "09:00"
const response = await fetch("https://wbiztool.com/api/v1/schedule_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
country_code: "91",
phone: "9876543210",
msg: "Hi Aman, a reminder that your appointment starts in 30 minutes.",
date,
time,
timezone: tz,
}),
});
const result = await response.json(); // schedule errors come back with HTTP 200 and "status": 0
if (result.status === 1) {
console.log("Scheduled with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message ?? "no message in response");
}const express = require("express");
const app = express();
// WbizTool posts form fields, not JSON.
app.post("/wbiztool-webhook", express.urlencoded({ extended: false }), (req, res) => {
const { msg_id, status } = req.body; // status: SENT, FAILED, CANCELLED or EXPIRED
console.log(msg_id, status);
res.sendStatus(200);
});
app.listen(3000);Yang bisa Anda lakukan
Teks, gambar, dan file
Atur
msg_typeke 0 untuk teks, 1 untuk gambar, atau 2 untuk file. Beriimg_urlataufile_urlpublik, atau unggah file sebagai multipart form data di field bernamafile.Pesan personal dari data Anda
Isi
msgdari data Anda sendiri – nama, nomor pesanan, tanggal jatuh tempo. Format WhatsApp seperti *tebal* dan _miring_ bisa dipakai, hingga 3.000 karakter.Webhook untuk setiap status
Sertakan
webhookdan server Anda menerima POST form-encoded sepertimsg_id=9817263&status=SENTsaat pesan terkirim, gagal, dibatalkan, atau kedaluwarsa.Jadwalkan untuk nanti
POST ke
/api/v1/schedule_msg/dengandate(dd/mm/yyyy),time(HH:MM), dantimezone. Format tanggal denganIntl.DateTimeFormatdi timezone yang sama, bukan timezone server Anda.Buang pesan yang terlambat
expire_after_secondsmenandai pesan sebagai kedaluwarsa jika belum terkirim tepat waktu, cocok untuk pesan yang sensitif waktu seperti perkiraan waktu pengiriman.Pengingat berulang
API Pengingat mengulang pesan sesuai jadwal cron, seperti pukul 10.00 setiap tanggal 1. Pengingat memerlukan paket berbayar.
Perlu diketahui
"status": 1berarti pesan masuk antrean, bukan sudah diterima. Terkirim (Sent) adalah status sukses terakhir; API tidak melaporkan apakah pesan sudah diterima atau dibaca.- Error Kirim pesan kembali dengan HTTP 400 (429 saat batas harian); error Jadwalkan pesan biasanya kembali dengan HTTP 200 dan
"status": 0, jadi selalu parse body dan periksastatus, bukanresponse.ok. scheduleMessagedi client resmi mengirim field yang tidak dibaca endpoint jadwal. Panggil/api/v1/schedule_msg/dengan fetch sebagai gantinya, seperti contoh di atas.- Simpan kunci API di server Anda, misalnya di environment variable. Siapa pun yang memilikinya bisa mengirim dari nomor-nomor Anda, jadi jangan pernah menaruhnya di JavaScript browser, aplikasi mobile, atau kode yang Anda publikasikan.
- Untuk mengirim ke grup WhatsApp alih-alih ke nomor, lihat contoh pesan grup: bisa dipakai di setiap paket, termasuk uji coba gratis.
- Uji coba gratis berisi 50 pesan dalam 30 hari mana pun dan 1 nomor, tanpa kartu. Paket berbayar mulai $25 per bulan di AS (harga Anda ada di halaman Harga) dan mengirim pesan tanpa batas sesuai penggunaan wajar: hingga 1.000 per hari per nomor.
- Pesan dikirim dari nomor WhatsApp Anda sendiri, jadi aturan WhatsApp sendiri berlaku: kirim pesan ke orang yang menunggu kabar dari Anda.
Pertanyaan
- Apakah ada paket Node.js resmi untuk API WbizTool?
- Ada:
wbiztool-clientdi npm (npm install wbiztool-client).sendMessagemiliknya mengirim pesan. Untuk penjadwalan dan cek status, panggil endpoint-nya dengan fetch seperti contoh di atas. - Bisakah saya memanggil API dari browser?
- Jangan: request membawa kunci API Anda, dan siapa pun yang memilikinya bisa mengirim dari nomor-nomor Anda. Panggil API dari server Node.js Anda dan simpan kunci di environment variable.
- Bagaimana saya tahu pesan sudah terkirim?
- Balasan dengan
"status": 1danmsg_idberarti pesan sudah masuk antrean. Sertakan URLwebhookuntuk menerima POST denganSENT,FAILED,CANCELLED, atauEXPIRED, atau panggil endpoint Status pesan denganmsg_id. Terkirim (Sent) adalah status akhir: API tidak melaporkan pesan diterima atau dibaca. - Format nomor telepon apa yang harus saya kirim?
- Kirim nomor dengan kode negaranya (6281234567890), atau tanpa kode negara (81234567890) bersama
country_code(62). Spasi, +, tanda hubung, dan tanda kurung dihapus otomatis, jadi +62 812-3456-7890 juga bisa. - Apakah saya perlu WhatsApp Business API atau persetujuan Meta?
- Tidak. WbizTool mengirim dari nomor WhatsApp atau WhatsApp Business Anda sendiri, yang ditautkan seperti WhatsApp Web. Tidak perlu persetujuan Meta dan tidak ada template pesan yang harus disetujui.
- Apakah ada biaya per pesan?
- Tidak. Uji coba gratis mencakup 50 pesan dalam 30 hari mana pun. Paket berbayar mengirim pesan tanpa batas sesuai penggunaan wajar, hingga 1.000 per hari per nomor: Lite $25, Standard $59, dan Advanced $149 per bulan di AS; halaman Harga menampilkan harga untuk negara Anda.
Baca panduannya
- API Kirim pesan
- API Status pesan
- API Jadwalkan pesan
- Kunci API dan Client ID
- Hubungkan nomor WhatsApp Anda
Terkait
- PythonKirim pesan WhatsApp dari Python dengan client resmi atau requests biasa.
- cURLKirim, jadwalkan, dan lacak pesan WhatsApp dengan satu perintah cURL.
- n8nKirim pesan WhatsApp dari n8n dengan community node WbizTool.
- Update pesananKonfirmasi pesanan, update pengiriman, dan notifikasi pesanan baru untuk Shopify, WooCommerce, dan lainnya.
Kirim pesan WhatsApp otomatis pertama Anda hari ini
Buat akun, scan kode QR, dan kirim pesan dalam waktu kurang dari lima menit.
Mulai gratisPaket berbayar mulai $25 per bulan di AS. Harga
