Langsung ke konten
WbizTool

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

  1. 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_client Anda.

  2. Instal client, atau gunakan fetch

    Jalankan npm install wbiztool-client untuk client resmi. Atau panggil API dengan fetch, yang tidak memerlukan paket di Node.js 18 ke atas.

  3. Kirim pesannya

    POST kredensial Anda, nomor telepon, dan teksnya ke https://wbiztool.com/api/v1/send_msg/. Balasan dengan "status": 1 dan msg_id berarti pesan sudah masuk antrean di nomor Anda.

  4. Pastikan pesan terkirim

    Sertakan URL webhook untuk diberi tahu saat pesan terkirim atau gagal, atau tanyakan ke endpoint Status pesan dengan msg_id.

Contoh kode Node.js

Instal client resmi
npm install wbiztool-client
Kirim teks dengan client resmi
const { 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);
Kirim teks dengan fetch
// 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);
}
Balasan
{"status": 1, "message": "Created", "msg_id": 9817263}
Kirim PDF (unggah file)
// 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());
Cek status pesan
// 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);
}
Jadwalkan pesan untuk nanti
// 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");
}
Terima webhook status (Express)
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_type ke 0 untuk teks, 1 untuk gambar, atau 2 untuk file. Beri img_url atau file_url publik, atau unggah file sebagai multipart form data di field bernama file.

  • Pesan personal dari data Anda

    Isi msg dari 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 webhook dan server Anda menerima POST form-encoded seperti msg_id=9817263&status=SENT saat pesan terkirim, gagal, dibatalkan, atau kedaluwarsa.

  • Jadwalkan untuk nanti

    POST ke /api/v1/schedule_msg/ dengan date (dd/mm/yyyy), time (HH:MM), dan timezone. Format tanggal dengan Intl.DateTimeFormat di timezone yang sama, bukan timezone server Anda.

  • Buang pesan yang terlambat

    expire_after_seconds menandai 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": 1 berarti 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 periksa status, bukan response.ok.
  • scheduleMessage di 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-client di npm (npm install wbiztool-client). sendMessage miliknya 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": 1 dan msg_id berarti pesan sudah masuk antrean. Sertakan URL webhook untuk menerima POST dengan SENT, FAILED, CANCELLED, atau EXPIRED, atau panggil endpoint Status pesan dengan msg_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

Terkait

Kirim pesan WhatsApp otomatis pertama Anda hari ini

Buat akun, scan kode QR, dan kirim pesan dalam waktu kurang dari lima menit.

Mulai gratis

Paket berbayar mulai $25 per bulan di AS. Harga