واجهة برمجة تطبيقات البث (Broadcasts API)
يُعد البث عملية إرسال واحدة للخارج: جمهور، ورسالة افتتاحية، وقناة واحدة، وجدول زمني. ويمكنه اختياريًا تحديد وكيل الذكاء الاصطناعي (AI Agent) الذي يتولى الردود الواردة. تتيح لك واجهة برمجة تطبيقات البث إنشاء هذه الرسائل وتسعيرها وإطلاقها ومراقبتها من خلال الكود الخاص بك بدلاً من لوحة التحكم. للمنتج نفسه، راجع دليل البث.
- عنوان URL الأساسي —
https://api.youraiconnector.com/v1 - المصادقة — مفتاح واجهة برمجة التطبيقات الخاص بك (راجع المصادقة)
- الأخطاء والترقيم — راجع الأخطاء والترقيم
توضح جميع الأمثلة أدناه نموذج الاستعلام ?apiKey= في cURL ورأس X-API-Key في JavaScript وPython — كلاهما يعمل على كل نقطة نهاية.
في مستكشف واجهة برمجة التطبيقات. كل نقطة نهاية في هذه الصفحة موجودة في مواصفات OpenAPI المنشورة، لذا يمكنك تصفح حقولها بدقة وتشغيل طلبات مباشرة في مستكشف واجهة برمجة التطبيقات.
كيف يتم تجميع عملية الإرسال
إرسال بث يتطلب أربع استدعاءات، وليس واحدة:
- إنشاء البث مع جمهوره وقناته وجدوله الزمني — يبدأ كـ
Draft. - تعيين الرسالة الافتتاحية. في WhatsApp Business، يعني هذا إرسال قالب للموافقة عليه (أو اختيار قالب تمت الموافقة عليه مسبقًا). في أي قناة أخرى، يكون النص عاديًا.
- تقدير التكلفة إذا كنت ترغب في التحقق من السعر قبل إنفاق أي شيء (اختياري).
- إطلاقه. يقوم الإطلاق بإجراء فحص كامل — الجمهور، الرسالة، الموافقة على القالب، المرسل المتصل — ثم يبدأ الإرسال أو يخبرك بالضبط بما هو مفقود.
لا يتم إرسال أي شيء حتى تقوم باستدعاء الإطلاق.
كائن البث
{
"id": "bcd123abc456",
"name": "June promo",
"status": "Draft",
"channel": "whatsapp",
"agent_id": "agt_789",
"list_id": "lst_456",
"list_name": "Newsletter subscribers",
"total_contacts": 240,
"send_to_new_list_members": false,
"whats_app_template": {
"body": "Hi {{first_name}}, our June offer is live.",
"status": "approved",
"sid": "HX0123...",
"language": "en",
"category": "marketing",
"variables": ["first_name"]
},
"execution_date": 1781000000000,
"drip_mode": true,
"time_critical": false,
"total_contacts_sent": 0,
"credits_used": 0,
"created_at": 1780900000000,
"last_modified_at": 1780900000000
}
تأتي الطوابع الزمنية كملي ثانية من الحقبة (epoch milliseconds) (execution_date، created_at، last_modified_at، …)، ويأتي أي مرجع لجهة اتصال كسلسلة مسار مثل contacts/uid_whatsapp_15551234567.
الحقول التي تقوم بتعيينها
| الحقل | الوصف |
|---|---|
name |
اسم البث في لوحة التحكم. |
channel |
القناة الواحدة التي يرسل البث من خلالها: whatsapp، whatsapp_web، sms، instagram، messenger، facebook، telegram، instagram_private، line، viber، imessage، email، chat_widget، custom_channel. يحتوي البث على قناة واحدة فقط — لإرسال نفس الشيء في مكان آخر، قم بتكراره على قناة أخرى. tiktok و skool مخصصان للرد فقط ولا يمكن البث من خلالهما أبدًا. |
agent_id |
وكيل الذكاء الاصطناعي الذي يجيب على الردود. اتركه null وستصل الردود إلى صندوق الوارد الخاص بفريقك بدلاً من ذلك. |
list_id |
قائمة جهات الاتصال المراد الإرسال إليها. هذه هي الطريقة التي تحدد بها الجمهور من واجهة برمجة التطبيقات — راجع جهات الاتصال لإنشاء القوائم وتعبئتها. |
list_name |
الاسم المعروض بجوار البث. تجميلي فقط. |
send_to_new_list_members |
true يبقي البث نشطًا بحيث يحصل أي شخص يضاف إلى القائمة لاحقًا على الرسالة الافتتاحية أيضًا. |
whats_app_template |
الرسالة الافتتاحية. في WhatsApp Business، هي قالب حقيقي معتمد؛ وفي أي قناة أخرى، يتم استخدام body كنص افتتاحي عادي. قم بتعيينها من خلال نقاط نهاية القالب، وليس يدويًا. |
opener_media |
صورة أو فيديو واحد يتم إرساله مع الرسالة الافتتاحية. أرسل دائمًا الكائن بالكامل (أو null لإزالته) — سيتم رفض كتابة مفاتيح فردية بداخله. غير مدعوم في الرسائل القصيرة (SMS). |
execution_date |
وقت الإرسال. أرسل طابعًا زمنيًا بتنسيق ISO 8601 أو ملي ثانية من الحقبة. التاريخ المستقبلي يجدول الإرسال؛ احذفه (أو استخدم تاريخًا سابقًا) للإرسال بمجرد الإطلاق. |
drip_mode |
true يوزع الإرسال على دفعات بمرور الوقت بدلاً من إرساله دفعة واحدة. |
time_critical |
true يلغي التوزيع التلقائي الذي يبدأ عند تجاوز 50 جهة اتصال — للجمهور الدافئ الذي يحتاج إلى الرسالة الآن. لا يرفع حد الإرسال اليومي للقناة نفسها. |
batch_size |
عدد جهات الاتصال لكل دفعة عند الإرسال التدريجي. |
follow_up_config |
سلسلة المتابعة لجهات الاتصال التي لا ترد أبدًا. |
أي شيء ترسله كـ user_id أو id أو status أو source_campaign_id يتم تجاهله عند الإنشاء وإسقاطه عند التحديث — الحالة تنتقل فقط عبر نقاط نهاية الإطلاق والإيقاف المؤقت والاستئناف أدناه.
الحقول التي تحتفظ بها المنصة
status، total_contacts_sent، unique_contacts_replied، overall_reply_rate، credits_used، paused_reason، completion_summary، عدادات الدفعات، و contacts (جهات الاتصال الفردية المرفقة من لوحة التحكم، مقروءة كسلاسل مسار). اقرأها، ولا تكتبها.
الحالات
| الحالة | المعنى |
|---|---|
Draft |
قيد الإنشاء. لم يتم جدولة أي شيء. |
Pending Approval |
تم الإطلاق، ولكن نموذج WhatsApp الخاص به لا يزال بانتظار قرار. سيبدأ الإرسال تلقائياً بمجرد الموافقة على النموذج — لا تحتاج إلى الإطلاق مرة أخرى. |
Scheduled |
تم الإطلاق مع execution_date مستقبلي. |
Sending |
قيد الإرسال النشط (البث المجهز لأعضاء القائمة الجدد يبقى هنا أثناء انتظارهم). |
Paused |
معلق — بواسطتك، أو تلقائياً بواسطة فحص الأمان. |
Sent |
مكتمل. |
Failed |
مكتمل مع فشل أكثر من نصف عمليات الإرسال. |
إنشاء بث
POST /broadcasts — ينشئ Draft.
cURL
curl -X POST "https://api.youraiconnector.com/v1/broadcasts?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "June promo",
"channel": "whatsapp",
"list_id": "lst_456",
"agent_id": "agt_789",
"drip_mode": true,
"execution_date": "2026-06-15T09:00:00.000Z"
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/broadcasts", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
name: "June promo",
channel: "whatsapp",
list_id: "lst_456",
agent_id: "agt_789",
drip_mode: true,
execution_date: "2026-06-15T09:00:00.000Z",
}),
});
const { broadcast_id } = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/broadcasts",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"name": "June promo",
"channel": "whatsapp",
"list_id": "lst_456",
"agent_id": "agt_789",
"drip_mode": True,
"execution_date": "2026-06-15T09:00:00.000Z",
},
)
print(res.json()["broadcast_id"])
الاستجابة (201)
{ "success": true, "broadcast_id": "bcd123abc456" }
سرد عمليات البث
GET /broadcasts — كل بث على الحساب، الأحدث أولاً.
معلمات الاستعلام
| المعلمة | مطلوبة | الوصف |
|---|---|---|
status |
لا | إرجاع عمليات البث في حالة واحدة فقط، على سبيل المثال Sending. طابق التهجئة في جدول الحالة بدقة. |
curl "https://api.youraiconnector.com/v1/broadcasts?apiKey=YOUR_API_KEY&status=Sending"
const res = await fetch("https://api.youraiconnector.com/v1/broadcasts?status=Sending", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { broadcasts } = await res.json();
res = requests.get(
"https://api.youraiconnector.com/v1/broadcasts",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"status": "Sending"},
)
broadcasts = res.json()["broadcasts"]
الاستجابة (200)
{ "success": true, "broadcasts": [{ "id": "bcd123abc456", "name": "June promo", "status": "Sending", "...": "..." }] }
الحصول على بث
GET /broadcasts/{broadcastId} — يُرجع { "success": true, "broadcast": { ... } }. استخدمه لاستطلاع حالة إرسال قيد التشغيل: total_contacts_sent، وunique_contacts_replied، وoverall_reply_rate، وcredits_used يتم تحديثها أثناء العملية.
curl "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY"
البث غير الموجود في حسابك يُرجع 404.
تحديث بث
PUT /broadcasts/{broadcastId} — أرسل فقط الحقول التي تريد تغييرها. يمكنك أيضاً معالجة مفتاح واحد داخل كائن متداخل باستخدام مسار منقط، على سبيل المثال "whats_app_template.body".
curl -X PUT "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "June promo (v2)", "execution_date": "2026-06-16T09:00:00.000Z" }'
await fetch("https://api.youraiconnector.com/v1/broadcasts/bcd123abc456", {
method: "PUT",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ name: "June promo (v2)", execution_date: "2026-06-16T09:00:00.000Z" }),
});
الجسم الفارغ يُرجع 400. قاعدتان تجدر معرفتهما:
opener_mediaهو إما الكل أو لا شيء. أرسل الكائن كاملاً، أوnullلإزالة المرفق. المسار المنقط إليه (opener_media.name) يتم رفضه بـ400، لأن المرفق الذي تم تحديثه جزئياً سيصف ملفاً غير موجود.- الحالة غير قابلة للتعديل. استخدم الإطلاق، والإيقاف المؤقت، والاستئناف.
رسالة الافتتاح
يحمل كل بث رسالته الافتتاحية في whats_app_template. يعتمد معنى ذلك على القناة:
- WhatsApp Business — يجب أن تكون قالباً معتمداً من واتساب. استخدم إحدى نقطتي النهاية أدناه.
- أي قناة أخرى (WhatsApp Web، الرسائل القصيرة SMS، إنستغرام، ماسنجر، تيليجرام، …) — يكون
bodyالخاص بنفس الحقل هو ببساطة النص الذي يتم إرساله. يؤدي إرساله عبر نقطة النهاية أدناه إلى تخزينه ووضع علامة “جاهز” عليه دون تدخل من واتساب على الإطلاق.
إرسال قالب للموافقة
POST /broadcasts/{broadcastId}/template
| الحقل | مطلوب | الوصف |
|---|---|---|
body |
نعم | نص الرسالة، بحد أقصى 1024 حرفاً. استخدم عناصر نائبة {{variable}} للتخصيص. |
name |
لا | اسم القالب. يتم تعيينه افتراضياً على اسم البث. |
language |
لا | رمز اللغة. يتم تعيينه افتراضياً على en. |
category |
لا | marketing (افتراضي)، أو utility، أو authentication، أو authentication-international. هذا هو ما يتم تسعير الإرسال بناءً عليه، لذا يرجى توخي الدقة. |
variables |
لا | أسماء العناصر النائبة، بالترتيب الذي تظهر به. اترك هذا الحقل فارغاً ليتم قراءتها من النص الأساسي — وهو ما تريده عادةً، لأن عملية الإرسال تملؤها من بيانات كل جهة اتصال. |
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/template?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Hi {{first_name}}, our June offer is live until Friday.",
"language": "en",
"category": "marketing"
}'
الاستجابة (200)
{ "success": true, "broadcast_id": "bcd123abc456", "template_status": "pending", "template_sid": "HX0123..." }
template_status هو ما يقوله واتساب: pending أثناء مراجعته، وapproved عندما يصبح قابلاً للاستخدام، وrejected إذا تم رفضه. في القنوات غير التابعة لواتساب، يتم الرد مباشرة بـ approved مع template_sid: null — لا يوجد شيء للمراجعة.
الأمور التي قد تعيقك:
- الإرسال أثناء وجود قالب سابق قيد المراجعة يُرجع
400. انتظر القرار أولاً. - تعديل قالب معتمد حالياً يبقي القالب المعتمد فعالاً حتى عودة القالب الجديد، بحيث لا يفقد البث الجاري رسالته الافتتاحية أبداً.
- على رقم واتساب متصل مباشرة عبر Meta، لا يمكن إرسال بث مرفق بصورة أو فيديو (
400) — المرفقات مدعومة في مسار WhatsApp Business المُدار وعلى WhatsApp Web.
استخدام قالب تمت الموافقة عليه مسبقاً
POST /broadcasts/{broadcastId}/template/select — ينسخ قالباً معتمداً مسبقاً من مكتبة القوالب الخاصة بك إلى البث، لذا لا يوجد شيء لانتظاره.
| الحقل | مطلوب | الوصف |
|---|---|---|
template_id |
نعم | معرف القالب المعتمد في حسابك. |
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/template/select?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "template_id": "tpl_abc123" }'
الاستجابة (200)
{
"success": true,
"broadcast_id": "bcd123abc456",
"template_status": "approved",
"template_sid": "HX0123...",
"body": "Hi {{first_name}}, our June offer is live until Friday.",
"name": "june_promo",
"language": "en",
"variables": ["first_name"],
"category": "marketing"
}
يتم التحقق من الموافقة من جانبنا بناءً على سجل المكتبة — أنت ترسل المعرف فقط. ستحصل على 400 إذا لم يكن البث مسودة واتساب، أو إذا لم يكن القالب معتمداً، أو إذا كان قالب متابعة بدلاً من كونه افتتاحياً، أو إذا كان البث يحتوي على مرفق (قوالب المكتبة نصية فقط). معرف القالب غير الموجود في حسابك يُرجع 404.
تقدير التكلفة
POST /broadcasts/{broadcastId}/estimate-cost — يحدد سعر الإرسال قبل الالتزام به. متاح في بثوث whatsapp وsms؛ أي قناة أخرى تُرجع 400. يحتاج البث إلى list_id، لأن التقدير يعتمد على عدد الجمهور.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/estimate-cost?apiKey=YOUR_API_KEY"
استجابة واتساب (200) — الأرصدة، مقسمة حسب بلد الوجهة:
{
"success": true,
"channel": "whatsapp",
"billing_mode": "credits",
"data": {
"countries": [
{ "countryCode": "31", "name": "Netherlands", "iso": "NL", "flag": "🇳🇱", "contactCount": 180, "costPerContact": 1.2, "subtotal": 216 },
{ "countryCode": "1", "name": "United States", "iso": "US", "flag": "🇺🇸", "contactCount": 60, "costPerContact": 0.9, "subtotal": 54 }
],
"totalContacts": 240,
"totalTemplateCost": 270,
"templateCategory": "marketing",
"billing_mode": "credits",
"service_messages_billable_soon": false
}
}
استجابة الرسائل القصيرة (SMS) (200) — بالدولار الأمريكي، بناءً على أسعار Twilio المباشرة لحساب Twilio الخاص بك:
{
"success": true,
"channel": "sms",
"billing_mode": "twilio_direct",
"data": {
"totalContacts": 240,
"messageLength": 118,
"segmentsPerMessage": 1,
"totalSegments": 240,
"estimatedCostUsd": 1.788,
"priceUnit": "USD",
"billedByTwilio": true,
"billing_mode": "twilio_direct",
"service_messages_billable_soon": false
}
}
اقرأ billing_mode قبل عرض الرقم. يوضح لك من الذي يتم محاسبته:
billing_mode |
من يدفع | ماذا تعني الأرقام |
|---|---|---|
credits |
حساب Your AI Connector الخاص بك | totalTemplateCost والأرقام الخاصة بكل بلد هي عبارة عن رصيد. |
twilio_direct |
حساب Twilio الخاص بك | estimatedCostUsd هو ما ستخصمه منك Twilio. |
meta_waba_direct |
حساب WhatsApp Business الخاص بك، المفوتر من قبل Meta | كل رقم رصيد يعود كـ null — عن قصد، حتى لا يتم الخلط بينه وبين “مجاني”. تظل أعداد البلدان وجهات الاتصال دقيقة. |
الرسائل القصيرة بدون بيانات اعتماد Twilio متصلة لا تزال تعيد أعداد الأجزاء، مع estimatedCostUsd: 0 — لا توجد أسعار للبحث عنها.
إطلاق بث
POST /broadcasts/{broadcastId}/launch
يقوم الإطلاق بالتحقق من كل شيء أولاً ثم ينتقل بالبث إلى الأمام. لا يوجد إطلاق جزئي: إما أن يبدأ، أو لا يتغير شيء وتحصل على خطأ يوضح السبب.
cURL
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
if (!data.success) console.error(data.error);
Python
res = requests.post(
"https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch",
headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json())
الاستجابة (200)
{ "success": true, "broadcast_id": "bcd123abc456", "status": "Scheduled" }
status هو المكان الذي وصل إليه البث:
Scheduled—execution_dateفي المستقبل.Sending— بدأ الآن.Pending Approval— قالب WhatsApp لا يزال قيد المراجعة. سيتم إرساله بمجرد الموافقة على القالب؛ لا تطلب الإطلاق مرة أخرى.
فقط Draft (أو بث Pending Approval تمت الموافقة على قالبه منذ ذلك الحين) يمكن إطلاقه — أي شيء آخر يعيد 400.
لماذا يتم رفض الإطلاق
كل واحدة من هذه تعود كـ 400 مع رسالة error بلغة واضحة:
| المشكلة | ما يجب إصلاحه |
|---|---|
| لا يوجد جمهور | قم بتعيين list_id (أو إرفاق جهات اتصال) قبل الإطلاق. |
| لا توجد رسالة افتتاحية | قم بتعيين الرسالة الافتتاحية — انظر الرسالة الافتتاحية. |
| مرفق في رسالة SMS | لا يمكن للرسائل القصيرة حمل صورة أو فيديو. قم بإزالة المرفق أو انقل البث إلى WhatsApp. |
| المرفق لا يتطابق مع القالب المعتمد | في WhatsApp، توجد الوسائط داخل القالب المعتمد، لذا فإن استبدال المرفق بعد ذلك يعني إعادة تقديم القالب. |
| القالب مرفوض | أعد كتابة الرسالة وقدمها مرة أخرى. |
| القالب لم يتم تقديمه أبداً | قدمه (أو اختر قالباً معتمداً) أولاً. |
| القالب معتمد ولكنه مفقود من حساب WhatsApp الخاص بك | عادةً ما يكون قالباً تم اعتماده قبل انتهاء اتصال الرقم. قدمه مرة أخرى. |
| لا يوجد مرسل متصل للقناة | قم بتوصيل القناة أولاً — انظر القنوات. |
| قناة للرد فقط | لا تسمح TikTok و Skool للشركات ببدء محادثة، لذا لا يمكن البث عبرها. |
| تم تجهيزه بالفعل | البث لديه بالفعل إرسال مجدول. أوقفه مؤقتاً قبل الإطلاق مرة أخرى. |
| لا يزال بانتظار الموافقة | سيتم إرساله تلقائياً عند الموافقة على القالب. |
| حساب WhatsApp Business محظور من قبل Meta | أوقفت Meta المحادثات التي تبدأها الشركات على حساب WhatsApp Business الخاص بك — عادةً ما تكون مشكلة في طريقة الدفع. أصلحها في Meta Business Manager. |
| بدأ من حملة كلاسيكية | أطلقه من محرر الحملات بدلاً من ذلك. انظر الحملات الكلاسيكية في البث. |
الإيقاف المؤقت والاستئناف
POST /broadcasts/{broadcastId}/pause يوقف بث Sending أو Scheduled مؤقتاً ويزيل أي شيء موجود في قائمة الانتظار.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/pause?apiKey=YOUR_API_KEY"
يؤدي إيقاف بث Pending Approval مؤقتاً إلى إعادته إلى Draft بدلاً من ذلك — لم يتم جدولة أي شيء بعد، لذا لا يوجد شيء يمكن استئنافه. أي حالة أخرى تعيد 400.
POST /broadcasts/{broadcastId}/resume يعيد تشغيل بث Paused:
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/resume?apiKey=YOUR_API_KEY"
الاستجابة (200)
{ "success": true, "broadcast_id": "bcd123abc456" }
يتم استئنافه في Sending، أو العودة إلى Scheduled إذا كان execution_date الخاص به لا يزال في المستقبل. يمكن فقط استئناف بث Paused.
استمر في الإرسال بعد إيقاف مؤقت بسبب انخفاض التفاعل
POST /broadcasts/{broadcastId}/override-engagement-guard
بينما يتم إرسال البث على دفعات، نقيس عدد الأشخاص الذين ردوا على كل دفعة قبل بدء الدفعة التالية. إذا لم يرد أحد تقريباً، يتوقف البث مؤقتاً من تلقاء نفسه — فعملية الإرسال التي تستمر في الدفع نحو الصمت هي أسرع طريقة ليتم تصفية الرقم أو حظره. إنه زر المتابعة على أي حال (Continue anyway) في لوحة التحكم.
نظراً لأن معدل الرد الذي تسبب في الإيقاف المؤقت لا يمكن أن يتغير أثناء توقف البث، فإن استئناف عادي سيؤدي فقط إلى إيقافه مؤقتاً مرة أخرى عند الفحص التالي. نقطة النهاية هذه هي قرار المتابعة على أي حال: فهي تسجل التجاوز على ذلك البث الواحد، وترفع الإيقاف المؤقت في نفس الاستدعاء إذا تم إيقاف البث مؤقتاً بسبب انخفاض التفاعل.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/override-engagement-guard?apiKey=YOUR_API_KEY"
الاستجابة (200)
{ "success": true, "broadcast_id": "bcd123abc456", "status": "Sending", "resumed": true }
resumed: true— تم إيقاف البث مؤقتاً بسبب انخفاض التفاعل وهو يعمل الآن مرة أخرى؛statusهو المكان الذي تم استئنافه فيه.resumed: false— لم يتم رفع أي شيء، يتم تسجيل التجاوز ببساطة للفحوصات المستقبلية. هذا ما تحصل عليه إذا لم يتم إيقاف البث مؤقتاً مطلقاً، أو تم إيقافه مؤقتاً لسبب مختلف (قمت بإيقافه يدوياً، أو تم الوصول إلى حد الإرسال، أو حدث خطأ في الكثير من عمليات الإرسال). لا يتم رفع هذه الإيقافات المؤقتة هنا — قم باستئنافه بنفسك بمجرد التعامل مع السبب.
ينطبق التجاوز على هذا البث فقط. إنه ليس إعداداً للحساب، ومن الآمن استدعاؤه مرتين.
تكرار بث
POST /broadcasts/{broadcastId}/duplicate — ينسخ الجمهور والرسالة والإعدادات إلى Draft جديد. كل شيء يتعلق بالتشغيل السابق (العدادات، الدفعات، الجدول الزمني، إحصائيات الرد) يبدأ من جديد.
| الحقل | مطلوب | الوصف |
|---|---|---|
to_channel |
لا | إنشاء النسخة على قناة مختلفة. هذه هي الطريقة التي ترسل بها نفس الشيء على قناتين — البث يكون دائماً على قناة واحدة فقط. |
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/duplicate?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "to_channel": "sms" }'
الاستجابة (201)
{ "success": true, "broadcast_id": "bcd999new111", "source_broadcast_id": "bcd123abc456" }
لا ترث النسخة أبداً موافقة WhatsApp المباشرة: في نسخة WhatsApp، يأتي القالب وهو بحاجة إلى تأكيدك، وفي نسخة إلى قناة أخرى يتم إسقاطه ويصبح النص هو الفاتح العادي. النسخ إلى SMS يؤدي أيضاً إلى إسقاط أي مرفق، نظراً لأن SMS لا يمكنه إرسال واحد.
حذف بث
DELETE /broadcasts/{broadcastId}
curl -X DELETE "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY"
يتم رفض بث Sending أو Scheduled باستخدام 400 — قم بإيقافه مؤقتاً أولاً.
البث الذي يعكس حملة كلاسيكية
تظهر الحملات الكلاسيكية التي ترسل رسائل أيضاً في قسم البث (Broadcasts)، وتعيدها واجهة برمجة التطبيقات (API) جنباً إلى جنب مع عمليات البث الأصلية (تحمل source_campaign_id). وهي تعمل بشكل مختلف قليلاً، لأن الحملة تظل هي المسؤولة:
- تعديل الجمهور أو الرسالة أو الجدول الزمني يعمل ويتم حفظه في الحملة.
- القناة، ووكيل الرد، والمرفق، وجميع عدادات التشغيل للقراءة فقط هنا — سيظهر
400إذا حاولت تغييرها. قم بتغييرها في الحملة. - الإطلاق (Launch) يعيد
400يوجهك إلى محرر الحملة. - الإيقاف المؤقت والاستئناف يعملان ويؤثران على الحملة.
- الحذف يعيد
400— احذف الحملة بدلاً من ذلك، وسيتم حذف إدخال البث الخاص بها معها. - التكرار (Duplicate) يمنحك بثاً أصلياً مستقلاً، وهي الطريقة المدعومة لنقل حملة أثبتت نجاحها.
الأخطاء
الطلبات الفاشلة تعيد {"success": false, "error": "<message>"} مع الحالات التالية:
| الحالة | المعنى |
|---|---|
400 |
هناك خطأ ما في الطلب أو في حالة البث — حقل مفقود، أو مرفق غير صالح، أو إجراء إطلاق/إيقاف مؤقت/استئناف/حذف غير مسموح به في الحالة الحالية للبث. توضح رسالة error السبب. |
401 |
مفتاح API مفقود أو غير صالح. |
403 |
خطتك لا تتضمن الوصول إلى API. |
404 |
لا يوجد مثل هذا البث في حسابك (أو، عند اختيار قالب، لا يوجد مثل هذا القالب). |
429 |
تم تجاوز حد المعدل. توقف مؤقتاً وحاول مرة أخرى. |
500 |
حدث خطأ ما من جانبنا. حاول مرة أخرى بعد انتظار قصير. |
الخطوات التالية
- دليل البث — المنتج الذي يقف خلف نقاط النهاية هذه، بما في ذلك سلوكيات التدرج والأمان
- واجهة برمجة تطبيقات جهات الاتصال — قم ببناء القائمة التي يرسل إليها البث
- واجهة برمجة تطبيقات القوالب — إدارة قوالب WhatsApp المعتمدة التي يمكنك الاختيار من بينها
- واجهة برمجة تطبيقات خطافات الويب (Webhooks) — اشترك في
Broadcast StartedوBroadcast Completedبدلاً من الاستطلاع (polling)