שליחת הודעות WhatsApp עם Node.js
שלחו טקסטים, תמונות וקבצים ב-WhatsApp מאפליקציית ה-Node.js שלכם, מהמספר שלכם שמקושר ל-WbizTool כמו WhatsApp Web. השתמשו בחבילה הרשמית wbiztool-client או ב-fetch שמובנה ב-Node.js 18 ומעלה.
ניסיון חינם: 50 הודעות בכל 30 יום, בלי כרטיס אשראי.
איך זה עובד
קבלו מפתח API וקשרו את המספר שלכם
הירשמו, ואז קשרו את מספר ה-WhatsApp שלכם בדף מספרי WhatsApp עם קוד QR או קוד צימוד, כמו WhatsApp Web. בהגדרות ← מפתחות API, צרו מפתח והעתיקו את ה-Client ID שלכם (המדריך למפתחות API למטה מראה איפה). המזהה שעל הכרטיס של המספר (כמו מזהה 678) הוא ה-
whatsapp_clientשלכם.התקינו את הלקוח, או השתמשו ב-fetch
הריצו
npm install wbiztool-clientבשביל הלקוח הרשמי. או קראו ל-API עם fetch, שלא צריך חבילה ב-Node.js 18 ומעלה.שלחו את ההודעה
שלחו POST עם פרטי ההתחברות, מספר הטלפון והטקסט אל
https://wbiztool.com/api/v1/send_msg/. תגובה עם"status": 1ו-msg_idפירושה שההודעה נכנסה לתור במספר שלכם.בדקו שההודעה יצאה
העבירו כתובת
webhookכדי לדעת מתי ההודעה נשלחת או נכשלת, או שאלו את נקודת הקצה של סטטוס ההודעה עם ה-msg_id.
דוגמאות קוד: 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);מה אפשר לעשות
טקסטים, תמונות וקבצים
הגדירו
msg_typeל-0 לטקסט, ל-1 לתמונה או ל-2 לקובץ. תנוimg_urlאוfile_urlציבוריים, או העלו את הקובץ כ-multipart form data בשדה בשםfile.הודעות אישיות מהנתונים שלכם
מלאו את
msgמהרשומות שלכם – שם, מספר הזמנה, תאריך פירעון. עיצוב של WhatsApp כמו *מודגש* ו-_נטוי_ עובד, עד 3,000 תווים.Webhooks לכל סטטוס
העבירו
webhook, והשרת שלכם יקבל POST מקודד כטופס, כמוmsg_id=9817263&status=SENT, כשההודעה נשלחת, נכשלת, מבוטלת או שפג תוקפה.תזמון למועד מאוחר יותר
שלחו POST אל
/api/v1/schedule_msg/עםdate(dd/mm/yyyy),time(HH:MM) ו-timezone. עצבו את התאריך עםIntl.DateTimeFormatבאותו אזור זמן, לא באזור הזמן של השרת שלכם.ויתור על הודעות שמגיעות מאוחר מדי
expire_after_secondsמסמן הודעה כפג תוקף אם היא לא יצאה בזמן, מה שמתאים להודעות רגישות לזמן כמו זמן הגעה משוער של משלוח.תזכורות חוזרות
ה-API לתזכורות חוזר על הודעה לפי לוח זמנים של cron, למשל ב-10:00 ב-1 בכל חודש. תזכורות דורשות תוכנית בתשלום.
טוב לדעת
"status": 1פירושו שההודעה נכנסה לתור, לא שהיא הגיעה. „נשלחה” הוא מצב ההצלחה הסופי; ה-API לא מדווח אם ההודעה הגיעה או נקראה.- שגיאות של שליחת הודעה חוזרות עם HTTP 400 (429 במגבלה היומית); שגיאות של תזמון הודעה חוזרות בדרך כלל עם HTTP 200 ו-
"status": 0, אז תמיד פענחו את הגוף ובדקו אתstatusבמקום אתresponse.ok. - הפונקציה
scheduleMessageשל הלקוח הרשמי שולחת שדה שנקודת הקצה של התזמון לא קוראת. במקום זאת, קראו ל-/api/v1/schedule_msg/עם fetch, כמו שמוצג למעלה. - שמרו את מפתח ה-API בשרת שלכם, למשל במשתנה סביבה. כל מי שמחזיק בו יכול לשלוח מהמספרים שלכם, אז לעולם אל תשימו אותו ב-JavaScript של הדפדפן, באפליקציה לנייד או בקוד שאתם מפרסמים.
- כדי לפרסם בקבוצת WhatsApp במקום לשלוח למספר, ראו את הדוגמה להודעות לקבוצות: היא עובדת בכל תוכנית, כולל תקופת הניסיון החינמית.
- בתקופת הניסיון החינמית יש 50 הודעות בכל 30 יום ומספר אחד, בלי כרטיס אשראי. תוכניות בתשלום מתחילות ב-25$ לחודש בארה״ב (המחיר שלכם מופיע בדף המחירים) ושולחות הודעות ללא הגבלה במסגרת שימוש הוגן: עד 1,000 ביום לכל מספר.
- ההודעות יוצאות ממספר ה-WhatsApp שלכם, ולכן הכללים של WhatsApp עצמה חלים: שלחו הודעות לאנשים שמצפים לשמוע מכם.
שאלות
- יש חבילת Node.js רשמית ל-API של WbizTool?
- כן:
wbiztool-clientב-npm (npm install wbiztool-client). הפונקציהsendMessageשלה שולחת הודעה. לתזמון ולבדיקות סטטוס, קראו לנקודות הקצה עם fetch כמו שמוצג למעלה. - אפשר לקרוא ל-API מהדפדפן?
- אל תעשו את זה: הבקשה נושאת את מפתח ה-API שלכם, וכל מי שמחזיק בו יכול לשלוח מהמספרים שלכם. קראו ל-API משרת ה-Node.js שלכם ושמרו את המפתח במשתנה סביבה.
- איך יודעים שההודעה נשלחה?
- תגובה עם
"status": 1ו-msg_idפירושה שההודעה נכנסה לתור. העבירו כתובתwebhookכדי לקבל POST עםSENT,FAILED,CANCELLEDאוEXPIRED, או קראו לנקודת הקצה של סטטוס ההודעה עם ה-msg_id. „נשלחה” הוא המצב הסופי: ה-API לא מדווח אם ההודעה הגיעה או נקראה. - באיזה פורמט לשלוח את מספר הטלפון?
- שלחו את המספר עם קידומת המדינה (919876543210), או בלעדיה (9876543210) יחד עם
country_code(91). רווחים, +, מקפים וסוגריים מוסרים בשבילכם, כך שגם +91 98765-43210 עובד. - צריך את WhatsApp Business API או אישור של Meta?
- לא. WbizTool שולחת ממספר ה-WhatsApp או ה-WhatsApp Business שלכם, שמקושר כמו WhatsApp Web. אין אישור של Meta ואין תבניות הודעה שצריך לאשר.
- יש תשלום לכל הודעה?
- לא. תקופת הניסיון החינמית כוללת 50 הודעות בכל 30 יום. תוכניות בתשלום שולחות הודעות ללא הגבלה במסגרת שימוש הוגן, עד 1,000 ביום לכל מספר: Lite ב-25$, Standard ב-59$ ו-Advanced ב-149$ לחודש בארה״ב; בדף המחירים מופיע המחיר במדינה שלכם.
קראו את המדריכים
- API לשליחת הודעה
- API לסטטוס הודעה
- API לתזמון הודעה
- מפתחות API ו-Client ID
- חיבור מספר ה-WhatsApp שלכם
עוד בנושא
שלחו היום את הודעת ה-WhatsApp האוטומטית הראשונה שלכם
צרו חשבון, סרקו את קוד ה-QR ושלחו הודעה בפחות מחמש דקות.
התחילו בחינםתוכניות בתשלום מתחילות ב-25$ לחודש בארה״ב. מחירים
