API v2 (تجريبي)
إلغاء الاشتراك
إلغاء الاشتراك يعني أن شخصًا لا يريد رسائل مساحة عملك. لا يُرسَل أي شيء أبدًا إلى رقم ألغى اشتراكه: تُرفض أي رسالة جديدة إليه، والرسائل التي وُضعت في قائمة الانتظار قبل ذلك تفشل بالخطأ Opted out بدلًا من أن تُرسَل. ويسري ذلك على كل طرق الإرسال: API (v1 وv2)، ولوحة التحكم، والحملات، ورسائل القوالب، والتذكيرات، وGoogle Sheets، وShopify.
القائمة هي نفسها تبويب ألغوا الاشتراك في صفحة جهات الاتصال في لوحة التحكم.
| العملية | نقطة النهاية | النطاق |
|---|---|---|
| إلغاء اشتراك رقم | POST /api/v2/opt-outs | contacts |
| عرض من ألغوا الاشتراك | GET /api/v2/opt-outs | contacts |
| جلب إلغاء اشتراك | GET /api/v2/opt-outs/{phone} | contacts |
| إعادة اشتراك رقم | DELETE /api/v2/opt-outs/{phone} | contacts |
تُضاف ردود STOP تلقائيًا#
عندما يرد شخص على أحد أرقام صندوق الوارد لديك برسالة ليست سوى كلمة إلغاء اشتراك، يُلغى اشتراكه تلقائيًا، مع source بقيمة reply ورسالته في keyword. والرسالة التي ليست سوى START (أو Subscribe) تعيد اشتراكه.
- الكلمات، بأحرف كبيرة أو صغيرة، ومع علامات الترقيم أو بدونها:
STOP،Stop all،Unsubscribe،Opt out،Baja،Parar،Sair،Stopp،Abmelden،Arrêt،Désabonner،Basta،Disiscrivi،Стоп،Отписаться،Berhenti،Dur،توقف،إلغاء الاشتراك،עצור،הסר. - لا تُحتسب إلا الرسالة التي هي الكلمة وحدها: «من فضلك توقف عن إرسال قائمة الأسعار إليّ» لا تلغي اشتراك أحد.
- يجب أن يكون صندوق الوارد مفعّلًا على الرقم الذي يردون عليه، لأن أرقام صندوق الوارد وحدها تقرأ الرسائل الواردة. ولا تُحتسب الردود الأقدم من 7 أيام، مثل تلك التي تُقرأ عند إضافة رقم إلى صندوق الوارد.
- لا يُرسَل إليهم أي شيء ردًا، ولا يجيب أي رد تلقائي على STOP.
إلغاء اشتراك رقم#
https://wbiztool.com/api/v2/opt-outsالنص (Body): JSON (application/json)
الجسم
phonestringمطلوبالرقم بالصيغة الدولية مع
+(+919876543210). تُتجاهل المسافات والشرطات والأقواس. ويعمل أيضًا@usernameفي Telegram.notestringاختياريالسبب، لفريقك، بحد أقصى 200 حرف. يظهر في تبويب ألغوا الاشتراك.
curl -X POST https://wbiztool.com/api/v2/opt-outs \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phone": "+919876543210", "note": "Asked by email"}'import os
import requests
r = requests.post("https://wbiztool.com/api/v2/opt-outs", timeout=30,
headers={"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}"},
json={"phone": "+919876543210", "note": "Asked by email"})
print(r.status_code, r.json())// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const r = await fetch("https://wbiztool.com/api/v2/opt-outs", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ phone: "+919876543210", note: "Asked by email" }),
});
console.log(r.status, await r.json());<?php
$ch = curl_init('https://wbiztool.com/api/v2/opt-outs');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['phone' => '+919876543210', 'note' => 'Asked by email']),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);الاستجابة: 201 مع سجل إلغاء الاشتراك. والرقم الذي ألغى اشتراكه من قبل يُرجع 200 مع سجله الموجود، دون تغيير.
{
"recipient": "+919876543210",
"source": "api",
"keyword": null,
"note": "Asked by email",
"created_at": "2026-10-26T09:12:03.120Z"
}
الأخطاء#
| HTTP | الرمز | متى |
|---|---|---|
400 | validation_failed | note ليس نصًا أو أطول من 200 حرف |
422 | invalid_phone | phone مفقود أو ليس رقم هاتف |
عرض من ألغوا الاشتراك#
https://wbiztool.com/api/v2/opt-outsكل من ألغى اشتراكه، الأحدث أولًا، في صفحات (limit من 1 إلى 100، والافتراضي 25، وcursor). أضف phone للبحث عن رقم واحد.
curl "https://wbiztool.com/api/v2/opt-outs?limit=100" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{
"data": [
{ "recipient": "+919876543210", "source": "reply", "keyword": "STOP", "note": null, "created_at": "2026-10-26T09:12:03.120Z" }
],
"next_cursor": null
}
جلب إلغاء اشتراك#
https://wbiztool.com/api/v2/opt-outs/{phone}الرقم في العنوان بالصيغة الدولية بدون + (919876543210). يُرجع 404 opt_out_not_found عندما لا يكون الرقم قد ألغى اشتراكه، لذا فهو فحص سريع قبل الإرسال.
curl https://wbiztool.com/api/v2/opt-outs/919876543210 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
إعادة اشتراك رقم#
https://wbiztool.com/api/v2/opt-outs/{phone}تُرسَل الرسائل إلى الرقم مجددًا من الآن فصاعدًا. والرسائل التي فشلت بالفعل بالخطأ Opted out تبقى فاشلة. لا تفعل ذلك إلا عندما يطلب الشخص رسائلك مجددًا.
curl -X DELETE https://wbiztool.com/api/v2/opt-outs/919876543210 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{ "recipient": "+919876543210", "deleted": true }
الرقم الذي لم يُلغِ اشتراكه يُرجع 404 opt_out_not_found.
الإرسال إلى رقم ألغى اشتراكه#
-
POST /messagesيُرجع422recipient_opted_out، ولا يوضع شيء في قائمة الانتظار. وفي الإرسال الجماعي، تُرفض الدفعة كلها ويذكرfieldفي الخطأ العنصر المعني. - الرسالة التي وُضعت في قائمة الانتظار قبل أن يلغي الشخص اشتراكه تفشل مع
errorبقيمةOpted outعندما يحين دورها، ويتلقى webhook الحدثmessage.failed. - يضع API v1 الرسالة في قائمة الانتظار ثم تفشل بالخطأ
Opted out، كما سترى في حالة الرسالة. - يتخطى إعادة محاولة الرسائل الفاشلة في الحملات هذه الرسائل.
كائن Opt-out#
| الحقل | النوع | الوصف |
|---|---|---|
recipient | string | + والرقم، أو @username في Telegram |
source | string | reply: ردّ بـ STOP على رقم صندوق وارد. dashboard: أُضيف من جهات الاتصال. import: من ملف CSV في جهات الاتصال. api: هذا API |
keyword | string or null | الرد الذي ألغى اشتراكه، كما كتبه |
note | string or null | ملاحظة فريقك |
created_at | string | وقت إلغاء الاشتراك (ISO 8601، UTC) |
