توثيق API
كل ما تحتاجه لإرسال رسائل واتساب من موقعك أو تطبيقك أو أداة الأتمتة.
مقدمة
تتيح لك REST API إرسال رسائل واتساب والوسائط ورموز OTP والحملات، وإدارة جهات الاتصال واستقبال الأحداث. كل الطلبات والاستجابات بصيغة JSON.
https://bcmagency.net/wp-json/wpbcm/v1
المصادقة
أنشئ مفتاح API من لوحة التحكم (صفحة مفاتيح API) وأرسله مع كل طلب في الترويسة "token". كما يُقبل "Authorization: Bearer <key>" والمعامل ?token= في الرابط.
token: YOUR_API_TOKEN
حد الطلبات: 120 طلب في الدقيقة لكل مفتاح.
إعادة المحاولة بأمان (Idempotency-Key)
أضف الترويسة "Idempotency-Key" بقيمة فريدة (مثل UUID أو رقم الطلب) لأي طلب POST. إذا انقطع الاتصال وأعدت إرسال نفس الطلب بنفس المفتاح خلال 24 ساعة، تعيد الـ API النتيجة الأولى بدلاً من إرسال الرسالة مرتين. وتحمل الاستجابة المعادة الترويسة "Idempotent-Replayed: true".
Idempotency-Key: order-1045-shipped
الاستجابات والأخطاء
الاستجابات الناجحة تحتوي على "success": true. الأخطاء تُرجع كود HTTP مع "code" للبرمجة و "message" للقراءة.
{
"success": false,
"code": "INSTANCE_NOT_CONNECTED",
"message": "This WhatsApp number is not connected."
}
| HTTP | code | المعنى |
|---|---|---|
| 401 | TOKEN_MISSING / TOKEN_INVALID | مفتاح API ناقص أو غير صحيح. |
| 402 | SUBSCRIPTION_INACTIVE | لا يوجد اشتراك مفعّل. |
| 404 | INSTANCE_NOT_FOUND | معرّف رقم غير معروف. |
| 409 | INSTANCE_NOT_CONNECTED | الرقم غير مرتبط. امسح رمز QR مرة أخرى. |
| 409 | IDEMPOTENCY_CONFLICT | يوجد طلب بنفس مفتاح Idempotency-Key قيد التنفيذ حالياً. |
| 422 | VALIDATION_ERROR / INVALID_PHONE | هناك معامل ناقص أو غير صالح. |
| 429 | RATE_LIMITED / QUOTA_EXCEEDED | طلبات كثيرة جداً أو تم الوصول لحد الباقة. |
| 502 | GATEWAY_ERROR | لم يتمكن واتساب من تنفيذ الطلب. أعد المحاولة لاحقاً. |
إرسال رسالة نصية
https://bcmagency.net/wp-json/wpbcm/v1/send-messageإرسال رسالة واتساب نصية. يدعم المتغيرات {{variables}} والصيغ المتغيرة {أهلاً|مرحباً}.
| المعامل | مطلوب | الوصف |
|---|---|---|
instance_id | لا | معرّف الرقم (مثل ins_xxx). الافتراضي أول رقم متصل. |
phone | نعم | رقم المستلم بالصيغة الدولية مثل 201001234567 (أو معرّف جروب). |
message | نعم | نص الرسالة (بحد أقصى 4096 حرف). |
vars | لا | كائن بالمتغيرات المستخدمة في الرسالة، مثل {"name":"Ahmed"}. |
schedule_at | لا | تاريخ/وقت اختياري بصيغة ISO للإرسال لاحقاً. |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/send-message" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"instance_id": "ins_xxxxxxxx",
"phone": "201001234567",
"message": "Hello {{name}} 👋",
"vars": {
"name": "Ahmed"
}
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/send-message');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'instance_id' => 'ins_xxxxxxxx',
'phone' => '201001234567',
'message' => 'Hello {{name}} 👋',
'vars' => [
'name' => 'Ahmed'
]
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/send-message', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"instance_id": "ins_xxxxxxxx",
"phone": "201001234567",
"message": "Hello {{name}} 👋",
"vars": {
"name": "Ahmed"
}
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/send-message
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"instance_id": "ins_xxxxxxxx",
"phone": "201001234567",
"message": "Hello {{name}} 👋",
"vars": {
"name": "Ahmed"
}
}
الاستجابة
{
"success": true,
"message": "Message sent successfully.",
"data": {
"id": 1024,
"instance_id": "ins_xxx",
"direction": "out",
"phone": "201001234567",
"type": "text",
"status": "sent",
"provider_id": "3EB0C431C26A1916E1A8"
}
}
إرسال وسائط (صورة، فيديو، صوت، مستند)
https://bcmagency.net/wp-json/wpbcm/v1/send-mediaأرسل ملفاً من رابط عام مع وصف اختياري.
| المعامل | مطلوب | الوصف |
|---|---|---|
instance_id | لا | معرّف الرقم (مثل ins_xxx). الافتراضي أول رقم متصل. |
phone | نعم | رقم المستلم بالصيغة الدولية مثل 201001234567 (أو معرّف جروب). |
media_url | نعم | الرابط العام للملف. |
type | لا | image | video | audio | document |
caption | لا | نص الوصف. |
filename | لا | اسم الملف الذي يظهر للمستندات. |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/send-media" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"instance_id": "ins_xxxxxxxx",
"phone": "201001234567",
"media_url": "https://example.com/invoice.pdf",
"type": "document",
"caption": "Your invoice",
"filename": "invoice.pdf"
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/send-media');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'instance_id' => 'ins_xxxxxxxx',
'phone' => '201001234567',
'media_url' => 'https://example.com/invoice.pdf',
'type' => 'document',
'caption' => 'Your invoice',
'filename' => 'invoice.pdf'
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/send-media', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"instance_id": "ins_xxxxxxxx",
"phone": "201001234567",
"media_url": "https://example.com/invoice.pdf",
"type": "document",
"caption": "Your invoice",
"filename": "invoice.pdf"
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/send-media
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"instance_id": "ins_xxxxxxxx",
"phone": "201001234567",
"media_url": "https://example.com/invoice.pdf",
"type": "document",
"caption": "Your invoice",
"filename": "invoice.pdf"
}
إرسال قالب محفوظ
https://bcmagency.net/wp-json/wpbcm/v1/send-templateأرسل أحد قوالبك مع المتغيرات. لأرقام Cloud API يمكنك إرسال قوالب Meta المعتمدة عبر cloud_template.
| المعامل | مطلوب | الوصف |
|---|---|---|
instance_id | لا | معرّف الرقم (مثل ins_xxx). الافتراضي أول رقم متصل. |
phone | نعم | رقم المستلم بالصيغة الدولية مثل 201001234567 (أو معرّف جروب). |
template_id | نعم | معرّف القالب من GET /templates. |
vars | لا | كائن بالمتغيرات المستخدمة في الرسالة، مثل {"name":"Ahmed"}. |
cloud_template | لا | {"name":"order_update","language":"ar","params":["Ahmed","#1001"]} |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/send-template" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "201001234567",
"template_id": 3,
"vars": {
"name": "Ahmed",
"order": "#1001"
}
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/send-template');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '201001234567',
'template_id' => 3,
'vars' => [
'name' => 'Ahmed',
'order' => '#1001'
]
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/send-template', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"phone": "201001234567",
"template_id": 3,
"vars": {
"name": "Ahmed",
"order": "#1001"
}
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/send-template
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"phone": "201001234567",
"template_id": 3,
"vars": {
"name": "Ahmed",
"order": "#1001"
}
}
إرسال موقع
https://bcmagency.net/wp-json/wpbcm/v1/send-locationمشاركة موقع على الخريطة.
| المعامل | مطلوب | الوصف |
|---|---|---|
phone | نعم | رقم المستلم بالصيغة الدولية مثل 201001234567 (أو معرّف جروب). |
latitude | نعم | 30.0444 |
longitude | نعم | 31.2357 |
name | لا | اسم المكان. |
address | لا | العنوان. |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/send-location" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "201001234567",
"latitude": 30.0444,
"longitude": 31.2357,
"name": "Our store"
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/send-location');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '201001234567',
'latitude' => 30.0444,
'longitude' => 31.2357,
'name' => 'Our store'
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/send-location', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"phone": "201001234567",
"latitude": 30.0444,
"longitude": 31.2357,
"name": "Our store"
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/send-location
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"phone": "201001234567",
"latitude": 30.0444,
"longitude": 31.2357,
"name": "Our store"
}
التحقق من الأرقام على واتساب
https://bcmagency.net/wp-json/wpbcm/v1/check-numberتحقق من وجود حسابات واتساب للأرقام (لأرقام QR فقط، حتى 50 رقماً في الطلب).
| المعامل | مطلوب | الوصف |
|---|---|---|
phones | نعم | مصفوفة بأرقام الهواتف. |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/check-number" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phones": [
"201001234567",
"201112223334"
]
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/check-number');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'phones' => [
'201001234567',
'201112223334'
]
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/check-number', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"phones": [
"201001234567",
"201112223334"
]
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/check-number
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"phones": [
"201001234567",
"201112223334"
]
}
سجل الرسائل
https://bcmagency.net/wp-json/wpbcm/v1/messagesعرض الرسائل المرسلة والمستلمة مع حالة التسليم.
| المعامل | مطلوب | الوصف |
|---|---|---|
direction | لا | in | out |
status | لا | pending | sent | delivered | read | failed | received |
phone | لا | تصفية حسب الرقم. |
page / per_page | لا | 1 / 20 (max 100) |
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/messages" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/messages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/messages', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/messages
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
إرسال رمز OTP
https://bcmagency.net/wp-json/wpbcm/v1/otp/sendينشئ رمز تحقق آمن لمرة واحدة ويرسله على واتساب. لا يُرجع الـ API الرمز أبداً.
| المعامل | مطلوب | الوصف |
|---|---|---|
phone | نعم | رقم المستلم بالصيغة الدولية مثل 201001234567 (أو معرّف جروب). |
length | لا | 4 – 8 (default 6) |
expiry | لا | بالدقائق من 1 إلى 60 (الافتراضي 5). |
message | لا | نص مخصص يحتوي على {{code}} و {{minutes}}. |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/otp/send" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "201001234567",
"length": 6,
"expiry": 5
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/otp/send');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '201001234567',
'length' => 6,
'expiry' => 5
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/otp/send', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"phone": "201001234567",
"length": 6,
"expiry": 5
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/otp/send
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"phone": "201001234567",
"length": 6,
"expiry": 5
}
الاستجابة
{
"success": true,
"message": "Verification code sent.",
"data": {
"otp_id": 77,
"phone": "201001234567",
"expires_in": 300
}
}
التحقق من رمز OTP
https://bcmagency.net/wp-json/wpbcm/v1/otp/verifyيُرجع valid=true عند صحة الرمز. للرموز مدة صلاحية و5 محاولات.
| المعامل | مطلوب | الوصف |
|---|---|---|
phone | نعم | الرقم الذي أُرسل إليه الرمز (أو otp_id). |
code | نعم | 123456 |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/otp/verify" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "201001234567",
"code": "123456"
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/otp/verify');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '201001234567',
'code' => '123456'
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/otp/verify', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"phone": "201001234567",
"code": "123456"
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/otp/verify
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"phone": "201001234567",
"code": "123456"
}
الاستجابة
{
"success": true,
"valid": true,
"reason": "verified"
}
إنشاء حملة جماعية
https://bcmagency.net/wp-json/wpbcm/v1/campaignsأرسل لأرقام كثيرة مع تأخير عشوائي بين الرسائل. ابدأ الآن أو جدولها أو احفظها كمسودة.
| المعامل | مطلوب | الوصف |
|---|---|---|
instance_ids | نعم | مصفوفة بمعرّفات الأرقام (تُوزّع الرسائل بالتناوب). |
message | نعم | النص الافتراضي مع المتغيرات {{variables}}. |
messages | لا | مصفوفة صفوف: {"phone_number":"2010…","vars":{"name":"Amr"}}. |
numbers | لا | بديل: نص يحتوي رقماً في كل سطر. |
group_ids | لا | معرّفات مجموعات جهات الاتصال. |
media_url | لا | رابط وسائط اختياري. |
wait_min / wait_max | لا | تأخير عشوائي بين الرسائل بالثواني (الافتراضي 5 – 15). |
start_now | لا | true | false |
schedule_iso | لا | 2026-10-05T09:00:00+02:00 |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/campaigns" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "October offer",
"instance_ids": [
"ins_xxxxxxxx"
],
"message": "Hi {{name|there}}, enjoy 20% off today!",
"messages": [
{
"phone_number": "201001234567",
"vars": {
"name": "Amr"
}
},
{
"phone_number": "201009876543"
}
],
"wait_min": 5,
"wait_max": 15,
"start_now": true
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/campaigns');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'October offer',
'instance_ids' => [
'ins_xxxxxxxx'
],
'message' => 'Hi {{name|there}}, enjoy 20% off today!',
'messages' => [
[
'phone_number' => '201001234567',
'vars' => [
'name' => 'Amr'
]
],
[
'phone_number' => '201009876543'
]
],
'wait_min' => 5,
'wait_max' => 15,
'start_now' => true
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/campaigns', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"name": "October offer",
"instance_ids": [
"ins_xxxxxxxx"
],
"message": "Hi {{name|there}}, enjoy 20% off today!",
"messages": [
{
"phone_number": "201001234567",
"vars": {
"name": "Amr"
}
},
{
"phone_number": "201009876543"
}
],
"wait_min": 5,
"wait_max": 15,
"start_now": true
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/campaigns
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"name": "October offer",
"instance_ids": [
"ins_xxxxxxxx"
],
"message": "Hi {{name|there}}, enjoy 20% off today!",
"messages": [
{
"phone_number": "201001234567",
"vars": {
"name": "Amr"
}
},
{
"phone_number": "201009876543"
}
],
"wait_min": 5,
"wait_max": 15,
"start_now": true
}
عرض الحملات
https://bcmagency.net/wp-json/wpbcm/v1/campaignsالحملات مع عدادات التقدم.
| المعامل | مطلوب | الوصف |
|---|---|---|
status | لا | draft | scheduled | running | paused | completed | cancelled |
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/campaigns" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/campaigns');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/campaigns', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/campaigns
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
بدء / إيقاف / استئناف / إلغاء
https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/startاستبدل start بـ pause أو resume أو cancel.
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/start" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/start');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/start', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/start
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
مستلمو الحملة
https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/messagesحالة كل مستلم في الحملة.
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/messages" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/messages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/messages', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/messages
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
إعادة الإرسال للأرقام الفاشلة
https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/retryتنشئ وتبدأ حملة جديدة بنفس المحتوى للأرقام التي فشل الإرسال إليها.
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/retry" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/retry');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/retry', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/campaigns/{id}/retry
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
قائمة الأرقام المحظورة
https://bcmagency.net/wp-json/wpbcm/v1/blocklistالأرقام التي ألغت اشتراكها (بكلمة إلغاء الاشتراك) أو تم حظرها. تتخطاها الحملات تلقائياً.
| المعامل | مطلوب | الوصف |
|---|---|---|
search | لا | تصفية حسب الرقم. |
page / per_page | لا | 1 / 30 (max 100) |
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/blocklist" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/blocklist');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/blocklist', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/blocklist
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
حظر أرقام
https://bcmagency.net/wp-json/wpbcm/v1/blocklistأضف رقماً واحداً (phone) أو عدة أرقام (phones). استخدمها عندما يلغي العميل اشتراكه من نظامك.
| المعامل | مطلوب | الوصف |
|---|---|---|
phone | لا | 201001234567 |
phones | لا | ["201001234567","201009876543"] |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/blocklist" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phones": [
"201001234567",
"201009876543"
]
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/blocklist');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'phones' => [
'201001234567',
'201009876543'
]
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/blocklist', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"phones": [
"201001234567",
"201009876543"
]
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/blocklist
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"phones": [
"201001234567",
"201009876543"
]
}
الاستجابة
{
"success": true,
"message": "2 numbers added to the blocklist.",
"added": 2
}
إلغاء حظر رقم
https://bcmagency.net/wp-json/wpbcm/v1/blocklist/{id}احذف السجل باستخدام المعرّف من GET /blocklist.
curl -X DELETE "https://bcmagency.net/wp-json/wpbcm/v1/blocklist/{id}" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/blocklist/{id}');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/blocklist/{id}', {
method: 'DELETE',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: DELETE
URL: https://bcmagency.net/wp-json/wpbcm/v1/blocklist/{id}
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
إنشاء / تحديث جهات الاتصال
https://bcmagency.net/wp-json/wpbcm/v1/contactsإضافة أو تحديث حسب الرقم. أرسل جهة اتصال واحدة أو مصفوفة في "contacts".
| المعامل | مطلوب | الوصف |
|---|---|---|
phone | نعم | 201001234567 |
name | لا | Ahmed |
email | لا | ahmed@example.com |
group_ids | لا | [1,2] |
fields | لا | حقول مخصصة يمكن استخدامها كمتغيرات {{variables}}. |
curl -X POST "https://bcmagency.net/wp-json/wpbcm/v1/contacts" \
-H "token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "201001234567",
"name": "Ahmed",
"group_ids": [
1
],
"fields": {
"city": "Cairo"
}
}'
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/contacts');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '201001234567',
'name' => 'Ahmed',
'group_ids' => [
1
],
'fields' => [
'city' => 'Cairo'
]
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/contacts', {
method: 'POST',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
"phone": "201001234567",
"name": "Ahmed",
"group_ids": [
1
],
"fields": {
"city": "Cairo"
}
}),
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: POST
URL: https://bcmagency.net/wp-json/wpbcm/v1/contacts
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Send Body: ON → JSON
{
"phone": "201001234567",
"name": "Ahmed",
"group_ids": [
1
],
"fields": {
"city": "Cairo"
}
}
عرض جهات الاتصال
https://bcmagency.net/wp-json/wpbcm/v1/contactsالبحث في جهات الاتصال وتقسيمها لصفحات.
| المعامل | مطلوب | الوصف |
|---|---|---|
search | لا | الاسم أو الرقم أو البريد. |
group_id | لا | 1 |
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/contacts" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/contacts');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/contacts', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/contacts
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
عرض مجموعات جهات الاتصال
https://bcmagency.net/wp-json/wpbcm/v1/groupsالمجموعات مع عدد جهات الاتصال.
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/groups" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/groups');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/groups', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/groups
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
عرض قوالب الرسائل
https://bcmagency.net/wp-json/wpbcm/v1/templatesقوالبك المحفوظة.
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/templates" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/templates');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/templates', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/templates
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
عرض أرقام الواتساب
https://bcmagency.net/wp-json/wpbcm/v1/instancesكل الأرقام مع حالة الاتصال.
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/instances" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/instances');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/instances', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/instances
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
الاستجابة
{
"success": true,
"instances": [
{
"id": "ins_xxx",
"name": "Sales",
"driver": "gateway",
"status": "connected",
"phone": "201001234567"
}
]
}
الحالة اللحظية للرقم
https://bcmagency.net/wp-json/wpbcm/v1/instances/{instance_id}/statusيحدّث حالة الاتصال من واتساب.
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/instances/ins_xxxxxxxx/status" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/instances/ins_xxxxxxxx/status');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/instances/ins_xxxxxxxx/status', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/instances/ins_xxxxxxxx/status
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
الحساب والباقة والاستهلاك
https://bcmagency.net/wp-json/wpbcm/v1/accountحالة الاشتراك والحدود وعدادات الاستهلاك.
curl -X GET "https://bcmagency.net/wp-json/wpbcm/v1/account" \
-H "token: YOUR_API_TOKEN"
<?php
$ch = curl_init('https://bcmagency.net/wp-json/wpbcm/v1/account');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['token: YOUR_API_TOKEN', 'Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
const res = await fetch('https://bcmagency.net/wp-json/wpbcm/v1/account', {
method: 'GET',
headers: { 'token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
});
const data = await res.json();
console.log(data);
Node: HTTP Request
Method: GET
URL: https://bcmagency.net/wp-json/wpbcm/v1/account
Authentication: None
Send Headers: ON
• token = YOUR_API_TOKEN
Webhooks
أضف رابط Webhook من لوحة التحكم واختر الأحداث. نرسل طلب POST بصيغة JSON لكل حدث ونوقّعه بالمفتاح السري الخاص بك (HMAC-SHA256) في الترويسة X-WPBCM-Signature.
| الحدث | الوصف |
|---|---|
message.received | رسالة واردة |
message.sent | تم إرسال الرسالة |
message.failed | فشل الرسالة |
message.status | حالة التسليم / القراءة |
instance.status | اتصال / انفصال الرقم |
campaign.completed | اكتملت الحملة |
otp.verified | تم التحقق من OTP |
مثال على البيانات
{
"event": "message.received",
"webhook_id": 4,
"timestamp": 1790000000,
"data": {
"id": 2051,
"instance_id": "ins_xxxxxxxx",
"direction": "in",
"phone": "201001234567",
"contact_name": "Ahmed",
"type": "text",
"body": "Hello",
"status": "received",
"is_group": false
}
}
التحقق من التوقيع
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WPBCM_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $payload, 'YOUR_WEBHOOK_SECRET');
if (!hash_equals($expected, $signature)) { http_response_code(401); exit; }
$event = json_decode($payload, true);
// $event['event'], $event['data']['phone'], $event['data']['body'] ...
http_response_code(200);
const crypto = require('crypto');
app.post('/whatsapp-webhook', express.raw({ type: 'application/json' }), (req, res) => {
const expected = 'sha256=' + crypto.createHmac('sha256', 'YOUR_WEBHOOK_SECRET').update(req.body).digest('hex');
if (req.get('X-WPBCM-Signature') !== expected) return res.sendStatus(401);
const event = JSON.parse(req.body);
console.log(event.event, event.data);
res.sendStatus(200);
});
WooCommerce
- من لوحة التحكم افتح التكاملات ← WooCommerce واختر الرقم واكتب رسالة لكل حالة طلب.
- انسخ رابط التكامل الخاص بك.
- في متجرك اذهب إلى WooCommerce ← الإعدادات ← متقدم ← Webhooks ← إضافة Webhook. الموضوع: "Order created" (وواحد آخر لـ "Order updated")، رابط التسليم: رابط التكامل الخاص بك، والمفتاح السري: نفس المفتاح المحفوظ في التكامل (اختياري).
- احفظ. سيستلم العملاء الآن رسائل واتساب تلقائياً مع متغيرات مثل {{first_name}} و {{order_number}} و {{total}} و {{status}} و {{items}}.
EasyOrders
- من لوحة التحكم افتح التكاملات ← EasyOrders وأنشئ التكامل.
- انسخ رابط التكامل وأضفه كـ Webhook في إعدادات متجر EasyOrders (إنشاء طلب / تغيير حالة الطلب).
- يتم اكتشاف رقم العميل والاسم ورقم الطلب والإجمالي والحالة تلقائياً. إذا كانت البيانات تستخدم حقلاً آخر للرقم، حدد مساره (مثل customer.phone).
n8n
- أضف عقدة "HTTP Request" بطريقة POST والرابط هو الـ endpoint المطلوب (مثل /send-message).
- فعّل "Send Headers" وأضف ترويسة باسم token تحتوي مفتاح API.
- فعّل "Send Body" بصيغة JSON مع phone و message — يمكنك ربط القيم من العقد السابقة.
- للتفاعل مع الرسائل الواردة، أضف عقدة "Webhook" في n8n والصق رابطها في لوحة التحكم ← Webhooks.