أرسل رسائل 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 أدناه مكانه). المعرّف الظاهر على بطاقة الرقم (مثل ID 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 في حقل اسمه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 رسمية لـ WbizTool API؟
- نعم:
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 شهريًا في الولايات المتحدة؛ وتعرض صفحة الأسعار سعر بلدك.
اقرأ الأدلة
ذات صلة
أرسل أول رسالة WhatsApp تلقائية اليوم
أنشئ حسابًا، وامسح رمز QR، وأرسل رسالة في أقل من خمس دقائق.
ابدأ مجانًاتبدأ الباقات المدفوعة من $25 شهريًا في الولايات المتحدة. الأسعار
