واجهة برمجة تطبيقات قوالب WhatsApp
قوالب رسائل WhatsApp هي رسائل مكتوبة مسبقاً تمت الموافقة عليها للإرسال خارج نافذة المحادثة العادية التي تبلغ 24 ساعة — على سبيل المثال، رسالة ترحيب، أو تذكير بموعد، أو رسالة لإعادة التفاعل. تتيح لك واجهة برمجة التطبيقات هذه سرد القوالب وإنشائها وتعديلها وإرسالها للمراجعة والتحقق منها وحذفها وإرسالها برمجياً.
جميع المسارات أدناه نسبية إلى عنوان URL الأساسي لواجهة برمجة التطبيقات:
https://api.youraiconnector.com/v1
يجب مصادقة كل طلب. راجع المصادقة لمعرفة الطرق الأربع المقبولة. تستخدم الأمثلة الموجودة في هذه الصفحة ترويسة X-API-Key (ونموذجاً واحداً لمعامل الاستعلام لـ cURL).
ملاحظة: تعتمد القوالب على قناة WhatsApp Business API، لذا يتطلب هذا الجزء من واجهة برمجة التطبيقات كلاً من الوصول إلى واجهة برمجة التطبيقات وخطة تتضمن قنوات WhatsApp. وبدونها، يتم رفض الطلبات مع 403.
العمل مع الحسابات الفرعية (الوكالات)
حالات الموافقة
نظراً لأنه يجب مراجعة الرسائل المرسلة خارج محادثة مفتوحة من قبل WhatsApp أولاً، فإن كل قالب يحمل status موافقة:
| الحالة | المعنى |
|---|---|
draft |
تم إنشاؤه أو حفظه ولكن لم يتم إرساله للمراجعة بعد. لا يزال بإمكانك تعديله. |
received |
تم تقديمه وقبوله في قائمة انتظار المراجعة. |
pending |
قيد المراجعة. |
approved |
تمت الموافقة عليه للإرسال. |
rejected |
تم رفضه. يشرح حقل rejection_reason السبب؛ قم بإصلاحه، ثم أعد تقديمه. |
لا يمكن تعديل أو (إعادة) تقديم سوى القوالب ذات الحالة draft و rejected. بمجرد أن يصبح القالب approved، يتم قفله — قم بإنشاء قالب جديد إذا كنت بحاجة إلى إجراء تغييرات.
الموافقة التلقائية: بعض القنوات لا تتطلب خطوة مراجعة خارجية. يتم تخزين القوالب التي تم إنشاؤها أو تقديمها لحملة على مثل هذه القناة كـ
approvedعلى الفور، بدون معرف محتوى (sid).
القوالب في الحسابات المتصلة بـ Meta
تعمل نقاط النهاية هذه بنفس الطريقة بغض النظر عن اتصال WhatsApp الذي يعمل عليه حسابك، ولكن ما يحدث خلف الكواليس يختلف:
- في اتصال WhatsApp المُدار، يتم تسجيل القوالب لدى مزود المراسلة وتكون
sidهي معرف المحتوى الخاص بالمزود (HXXXXXXXX…). - في الحساب الذي يعمل رقمه على حسابه الخاص في WhatsApp Business (أي من خياري اتصال Meta)، يتم إنشاء القوالب ومراجعتها في حساب WhatsApp Business ذلك وتكون
sidهي معرف القالب الخاص بـ Meta — وهو سلسلة رقمية مثل"3394843740694756". لا تزالstatusتستخدم القيم الموجودة في الجدول أعلاه، ولا تزالrejection_reasonتحمل شرح Meta.
توجد نقطتا نهاية إضافيتان لهذا الغرض: واحدة للاستعلام عن نوع الاتصال الذي تستخدمه، وأخرى لمطابقة قائمة قوالبك مع حساب WhatsApp Business الخاص بك. يتم استيراد القوالب الموجودة بالفعل في حساب WhatsApp Business إلى مكتبتك عن طريق المزامنة، لذا فإن GET /whatsapp-templates بعدها ستدرجها مثل أي قالب آخر.
التحقق من الاتصال الذي تعمل عليه القوالب
GET /whatsapp-templates/provider
| الحقل | الوصف |
|---|---|
provider |
twilio عندما يتم تسجيل القوالب لدى مزود المراسلة المُدار، و meta عندما تكون موجودة في حساب WhatsApp Business الخاص بك. |
lane |
اتصال Meta المستخدم — meta_cloud_api (تطبيق Meta الخاص بك) أو meta_embedded (متصل عبر تطبيق Meta الخاص بنا). null في حالة الاتصال المُدار. |
waba_id |
حساب WhatsApp Business الذي تم إنشاء القوالب فيه، أو null. |
templates_enabled |
false عندما لا يكتمل اتصال Meta بعد (لا يوجد حساب WhatsApp Business أو رمز وصول مخزن). سيفشل إنشاء القوالب أو إرسالها مع 400 حتى يكتمل الاتصال. |
cURL
curl "https://api.youraiconnector.com/v1/whatsapp-templates/provider?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/provider", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/whatsapp-templates/provider",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"provider": "meta",
"lane": "meta_cloud_api",
"waba_id": "2357661648036355",
"templates_enabled": true
}
مزامنة القوالب من Meta
يعمل هذا على تحديث حالة الموافقة لكل قالب موجود في حساب WhatsApp Business الخاص بك، ويستورد أي قالب موجود هناك ولكنه ليس في مكتبتك بعد. من الآمن استدعاؤه بقدر ما تريد. في الاتصال المُدار، لا يوجد شيء للمزامنة، لذا لا يقوم الاستدعاء بأي إجراء سوى الإبلاغ عن عدد القوالب التي لديك.
POST /whatsapp-templates/meta-sync
| الحقل | الوصف |
|---|---|
imported |
القوالب التي تم العثور عليها في حساب WhatsApp Business والتي تمت إضافتها إلى مكتبتك بواسطة هذا الاستدعاء. |
updated |
القوالب الموجودة التي تغيرت حالتها أو تفاصيلها. |
total |
القوالب الموجودة في مكتبتك بعد المزامنة. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/meta-sync",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"provider": "meta",
"imported": 2,
"updated": 5,
"total": 12
}
التواصل مع Meta مباشرة (متقدم)
إذا كنت بحاجة إلى شيء لا توفره نقاط النهاية أعلاه — مثل رؤوس القوالب، أو التذييلات، أو الأزرار، أو قالب تم إنشاؤه يدويًا بالكامل — فإن /v1/meta-templates تمرر طلبك مباشرة إلى واجهة برمجة تطبيقات القوالب الخاصة بـ Meta، دون تخزين أي شيء في مكتبة القوالب الخاصة بك. يعمل هذا فقط على الحسابات التي يعمل رقمها على حساب WhatsApp Business الخاص بها؛ في الاتصال المُدار، يُرجع كل استدعاء 400 يطلب منك ربط تطبيق Meta أولاً.
| نقطة النهاية | وظيفتها |
|---|---|
GET /meta-templates |
تسرد القوالب الموجودة في حساب WhatsApp Business الخاص بك مع أحدث حالتها. أضف ?name= للتصفية حسب اسم قالب محدد. تُرجع { "success": true, "templates": [...] }. |
POST /meta-templates |
تنشئ قالباً وترسله لمراجعة Meta في خطوة واحدة. تتطلب name، و language، و body (أو مصفوفة components كاملة بدلاً من body). اختياري: variables (مصفوفة من السلاسل)، و category (MARKETING، أو UTILITY، أو AUTHENTICATION)، و header، و footer، و buttons. تُرجع 201 مع { "success": true, "template": {...} }. |
DELETE /meta-templates/{name} |
تحذف القالب باسمه في Meta — بكل لغاته. أضف ?hsm_id= مع معرف قالب Meta لإزالة لغة واحدة فقط. تُرجع { "success": true, "name": "..." }. |
القالب الذي ترفضه Meta يُرجع 400 مع شرح Meta الخاص في error.
سرد القوالب
إرجاع جميع القوالب الموجودة في حسابك، مع ملخص خفيف لكل منها.
GET /whatsapp-templates
cURL
curl "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/whatsapp-templates",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"data": [
{
"id": "template_abc123",
"name": "welcome_message",
"status": "approved",
"language": "en",
"body": "Hi {{first_name}}, thanks for reaching out!"
},
{
"id": "template_def456",
"name": "appointment_reminder",
"status": "pending",
"language": "en",
"body": "Hi {{first_name}}, this is a reminder about your appointment."
}
]
}
الحصول على قالب
يعيد التفاصيل الكاملة لقالب واحد، بما في ذلك متغيراته وحالته والطوابع الزمنية الخاصة به.
GET /whatsapp-templates/{templateId}
cURL
curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"template": {
"id": "template_abc123",
"name": "welcome_message",
"body": "Hi {{first_name}}, thanks for reaching out!",
"language": "en",
"variables": ["first_name"],
"status": "approved",
"sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"type": "general",
"category": "marketing",
"rejection_reason": null,
"campaign_id": "campaign123",
"date_created": "2026-06-01T10:00:00.000Z",
"date_updated": "2026-06-02T08:30:00.000Z",
"submitted_at": "2026-06-01T10:05:00.000Z",
"approved_at": "2026-06-02T08:30:00.000Z"
}
}
القالب غير الموجود في حسابك يعيد 404 مع { "success": false, "error": "Template not found" }.
إنشاء قالب
ينشئ قالباً لرسالة ترحيب الحملة ويقدمه للموافقة عليه في خطوة واحدة.
POST /whatsapp-templates
| الحقل | مطلوب | الوصف |
|---|---|---|
campaign_id |
نعم | الحملة التي ينتمي إليها القالب. |
name |
نعم | اسم للقالب. |
language |
نعم | رمز اللغة، على سبيل المثال en، es، de، pt_BR، zh_CN. |
body |
نعم | نص الرسالة، بحد أقصى 1024 حرفاً. |
variables |
لا | قائمة مرتبة بأسماء المتغيرات المستخدمة في المتن. |
يمكن كتابة عناصر نائبة للمتغيرات كـ {{first_name}} أو {first_name} أو [first_name] — يتم توحيدها جميعاً إلى صيغة الأقواس المزدوجة.
تعتمد النتيجة على قنوات الحملة:
- حملة WhatsApp Business API: يتم إرسال المحتوى لمراجعة WhatsApp. تحمل الاستجابة
campaign_status(receivedأوpending) وtemplate_sid. - قناة بدون خطوة مراجعة خارجية: يتم تخزين القالب واعتماده تلقائياً (
campaign_status: "approved"،template_sid: null). - لا توجد قناة WhatsApp في الحملة: لا يتم إنشاء أي شيء وتكون
campaign_statusهيnot_applicable.
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "campaign123",
"name": "welcome_message",
"language": "en",
"body": "Hi {{first_name}}, thanks for reaching out!",
"variables": ["first_name"]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
campaign_id: "campaign123",
name: "welcome_message",
language: "en",
body: "Hi {{first_name}}, thanks for reaching out!",
variables: ["first_name"],
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"campaign_id": "campaign123",
"name": "welcome_message",
"language": "en",
"body": "Hi {{first_name}}, thanks for reaching out!",
"variables": ["first_name"],
},
)
data = res.json()
الاستجابة (تم التقديم للمراجعة)
{
"success": true,
"campaign_status": "pending",
"template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
إنشاء قالب مستقل
ينشئ قالباً في مكتبة القوالب الخاصة بك دون ربطه بالرسالة الافتتاحية لحملة ما. هذه هي خطوة الإنشاء في دورة الحياة التي تتبعها بقية هذه الصفحة: أنشئه هنا، وقم بتحريره، وأرسله للمراجعة، واستعلم عن حالته، واحذفه عندما لا تعود بحاجة إليه.
POST /whatsapp-templates/docs
| الحقل | مطلوب | الوصف |
|---|---|---|
name |
نعم | اسم للقالب. |
language |
نعم | رمز اللغة، على سبيل المثال en، es، de، pt_BR، zh_CN. |
body |
نعم | نص الرسالة، بحد أقصى 1024 حرفاً. |
variables |
لا | قائمة مرتبة بأسماء المتغيرات المستخدمة في النص. |
status |
لا | draft (افتراضي) يخزنه دون إرسال؛ submitted يضعه في قائمة الانتظار لمراجعة WhatsApp مباشرة. |
type |
لا | general (افتراضي) أو smart_followup. |
category |
لا | marketing، utility، authentication، أو authentication-international. |
campaign_id |
لا | يربط القالب بإحدى حملاتك. |
قوالب المصادقة (رمز لمرة واحدة). لا تقبل واتساب قوالب المصادقة ذات النص الحر: نص الرسالة مُعد مسبقًا بواسطة واتساب ويجب أن يحتوي القالب على زر “نسخ الرمز”. عند إنشاء قالب باستخدام
category: "authentication"، نقوم بإرساله بهذا الشكل الثابت نيابةً عنك. يتم الاحتفاظ بـbodyكمعاينة معروضة في التطبيق، ولكن النص الذي يتلقاه جهة الاتصال الخاصة بك هو صياغة واتساب الخاصة (الرمز، وتذكير أمني، وملاحظة انتهاء الصلاحية لمدة 10 دقائق). قم بتعريف متغير واحد بالضبط، على سبيل المثال["code"]، وقم بتمرير الرمز عند الإرسال (راجع حقلvariablesفي إرسال قالب إلى جهة اتصال). يجب أن يكون الرمز أقصر من 15 حرفًا.
أي خيار إنشاء يجب أن أستخدم؟ استخدم هذا الخيار عندما تريد قالباً يمكنك تحريره وإرساله بنفسك. استخدم
POST /whatsapp-templates(أعلاه) عندما تريد تعيين الرسالة الافتتاحية لحملة ما — فهذا الخيار يتطلبcampaign_idويكتب مباشرة في الحملة.
يتم إرسال القالب الذي تم إنشاؤه كـ submitted لمراجعة WhatsApp في الخلفية، لذا تحقق من نقطة نهاية الحالة (status endpoint) لمعرفة النتيجة بدلاً من توقعها في الاستجابة.
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/docs?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "welcome_message",
"language": "en",
"body": "Hi {{first_name}}, thanks for reaching out!",
"variables": ["first_name"],
"status": "draft",
"category": "marketing"
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/docs", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "welcome_message",
language: "en",
body: "Hi {{first_name}}, thanks for reaching out!",
variables: ["first_name"],
status: "draft",
category: "marketing",
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/docs",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"name": "welcome_message",
"language": "en",
"body": "Hi {{first_name}}, thanks for reaching out!",
"variables": ["first_name"],
"status": "draft",
"category": "marketing",
},
)
data = res.json()
الاستجابة
{
"success": true,
"template_id": "template_abc123",
"status": "draft"
}
يؤدي فقدان name أو language أو body، أو استخدام لغة غير مدعومة، أو status غير draft أو submitted، أو type أو category غير معروف، أو نص يتجاوز 1024 حرفاً إلى إرجاع 400 مع error توضيحي. يؤدي إدخال campaign_id ليس من حملاتك إلى إرجاع 404.
تحديث قالب
يعدل قالباً لم تتم الموافقة عليه بعد. يمكن فقط تعديل القوالب التي تحمل الحالة draft أو rejected. قدم أي مزيج من name و body و language و variables — سيتم تغيير الحقول التي ترسلها فقط.
PUT /whatsapp-templates/{templateId}
لا تؤدي عملية التعديل إلى إعادة إرسال القالب للمراجعة. استخدم نقطة نهاية الإرسال (submit endpoint) بعد ذلك.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Hi {{first_name}}, here is an update for you.",
"variables": ["first_name"]
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
body: "Hi {{first_name}}, here is an update for you.",
variables: ["first_name"],
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"body": "Hi {{first_name}}, here is an update for you.",
"variables": ["first_name"],
},
)
data = res.json()
الاستجابة
{
"success": true,
"template_id": "template_abc123"
}
تؤدي محاولة تعديل قالب تم اعتماده بالفعل approved (أو غير قابل للتعديل لأسباب أخرى)، أو إرسال حقول فارغة، أو إرسال قيمة غير صالحة إلى إرجاع 400 مع error توضيحي.
إرسال قالب للموافقة
يُرسل قالب draft أو rejected للمراجعة. يتم اعتماد القوالب الموجودة على قناة لا تتطلب مراجعة خارجية على الفور؛ أما جميع القوالب الأخرى فيتم إرسالها إلى WhatsApp ويتم تخزين status المُعاد (عادةً ما يكون received أو pending) على القالب.
POST /whatsapp-templates/{templateId}/submit
يجب أن تُعلن قوالب المتابعة عن متغيراتها المطلوبة وتستخدمها قبل إمكانية إرسالها: عنصر نائب للاسم الأول، بالإضافة إلى عنصر نائب للسياق الشخصي للمتابعات الذكية.
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
{ method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/submit",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"template_id": "template_abc123",
"status": "pending",
"sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
التحقق من حالة الموافقة
نقطة نهاية خفيفة لاستطلاع الحالة الحالية للقالب. تُقرأ الحالة من السجل المخزن، والذي يتم تحديثه دورياً في الخلفية، لذا قد يستغرق ظهور الموافقة أو الرفض الأخير بعض الوقت.
GET /whatsapp-templates/{templateId}/status
cURL
curl "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/status",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"template_id": "template_abc123",
"name": "welcome_message",
"status": "approved",
"sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"rejection_reason": null,
"date_updated": "2026-06-02T08:30:00.000Z"
}
حذف قالب
يزيل سجل القالب من حسابك.
DELETE /whatsapp-templates/{templateId}
هام: في حالة الاتصال المُدار، تتم إزالة السجل المخزن فقط — أما المحتوى الذي وافقت عليه WhatsApp بالفعل فقد يظل مسجلاً لدى مزود المراسلة. أما في الحساب الذي يعمل على حساب WhatsApp Business خاص به، فيتم حذف القالب من ذلك الحساب أيضاً. وفي كلتا الحالتين، إذا كانت هناك حملة لا تزال تستخدم هذا القالب، فقم بتوجيه تلك الحملة إلى قالب آخر قبل الحذف، وإلا فإن عمليات الإرسال التي تعتمد عليه ستفشل.
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
{ method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"template_id": "template_abc123",
"note": "The template record was removed from your account. Content already approved by WhatsApp may remain registered with the messaging provider."
}
إرسال قالب إلى جهة اتصال
يرسل قالباً معتمداً إلى جهة اتصال، حتى في حال عدم وجود محادثة مفتوحة — وهذا يؤدي إلى إعادة فتح جلسة الدردشة. يمكنك استهداف جهة الاتصال بواسطة contactId أو بواسطة phoneNumber، واختيار القالب بواسطة whatsappTemplateId أو بواسطة templateName.
POST /whatsapp-templates/send
| الحقل | مطلوب | الوصف |
|---|---|---|
contactId |
واحد من هذين الاثنين | معرف جهة الاتصال. |
phoneNumber |
واحد من هذين الاثنين | رقم هاتف جهة الاتصال (مع رمز الدولة، بدون مسافات). يتم البحث عنه أو إنشاؤه إذا لزم الأمر. |
whatsappTemplateId |
واحد من هذين الاثنين | معرف القالب. |
templateName |
واحد من هذين الاثنين | اسم القالب، كما هو معروض في التطبيق. |
firstName |
لا | يُستخدم لملء بيانات جهة اتصال تم إنشاؤها حديثًا. |
lastName |
لا | يُستخدم لملء بيانات جهة اتصال تم إنشاؤها حديثًا. |
email |
لا | يُستخدم لملء بيانات جهة اتصال تم إنشاؤها حديثًا. |
variables |
لا | قيم صريحة لمتغيرات القالب، مُصنفة حسب اسم المتغير، على سبيل المثال { "code": "482913" }. القيمة المُعطاة هنا تتفوق على حقول جهة الاتصال لهذا المتغير؛ المتغيرات التي تتركها فارغة يتم ملؤها من جهة الاتصال كما هو موضح أدناه. هذه هي الطريقة التي تمرر بها رمزًا لمرة واحدة إلى قالب مصادقة. |
يدعم نص القالب استبدال المتغيرات المتقدم:
- المتغيرات الأساسية:
{{first_name}}،{{email}}،{{company}} - القيم الافتراضية:
{{first_name|there}}تعرضthereإذا كان الحقل فارغاً - التحويلات:
{{company|uppercase}}،{{name|lowercase}}،{{name|capitalize}} - مدمج:
{{company|Your Company|uppercase}}
الرصيد: يستهلك إرسال القالب رصيداً. تعتمد التكلفة الدقيقة على بلد المستلم وفئة القالب.
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/send?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contactId": "contact123",
"whatsappTemplateId": "template_abc123"
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/send", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
contactId: "contact123",
whatsappTemplateId: "template_abc123",
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/send",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"contactId": "contact123",
"whatsappTemplateId": "template_abc123",
},
)
data = res.json()
الاستجابة
{
"success": true,
"data": "WhatsApp template message sent successfully"
}
يؤدي الطلب الذي يفتقر إلى معرف جهة الاتصال ومعرفي القالب إلى إرجاع 400. إذا كان حسابك يفتقر إلى بيانات اعتماد المراسلة اللازمة للإرسال، تكون الاستجابة 403.
إنشاء أو تحديث قالب نشط لحملة
زوج ثانٍ من نقاط النهاية لقالب افتتاح الحملة، محدد النطاق حسب المسار بدلاً من campaign_id في النص الأساسي. هذه هي النقاط التي يجب استخدامها لحملة نشطة بالفعل: على عكس إنشاء قالب أعلاه، فإن التحديث هنا يعيد أيضاً إرسال مسودات المتابعة الخاصة بالحملة للمراجعة، بحيث يظل قالب الافتتاح ومتابعاته متزامنين.
POST /whatsapp-templates/campaign/{campaignId} ينشئ قالب افتتاح الحملة. PUT /whatsapp-templates/campaign/{campaignId} يقوم بتعديله — يجب أن تحتوي الحملة بالفعل على قالب، وإلا فسيتم إرجاع 400.
| الحقل | مطلوب | الوصف |
|---|---|---|
name |
نعم | اسم للقالب. |
language |
نعم | رمز اللغة، على سبيل المثال en، es، de، pt_BR، zh_CN. |
body |
نعم | نص الرسالة، بحد أقصى 1024 حرفاً. |
variables |
نعم | قائمة مرتبة بأسماء المتغيرات المستخدمة في النص الأساسي. مرر مصفوفة فارغة إذا كان القالب لا يستخدم أياً منها. |
cURL (إنشاء)
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "welcome_message",
"language": "en",
"body": "Hi {{first_name}}, thanks for reaching out!",
"variables": ["first_name"]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "welcome_message",
language: "en",
body: "Hi {{first_name}}, thanks for reaching out!",
variables: ["first_name"],
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/campaign/campaign123",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"name": "welcome_message",
"language": "en",
"body": "Hi {{first_name}}, thanks for reaching out!",
"variables": ["first_name"],
},
)
data = res.json()
الاستجابة
{
"success": true,
"campaign_status": "pending",
"template_sid": "HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"message": "WhatsApp template created and campaign updated successfully."
}
للتحرير، قم بتبديل الطريقة إلى PUT واستخدم نفس الحقول — هذا يعيد إرسال قالب الافتتاح (ومسودات المتابعة للحملة، في حملة WhatsApp API) للمراجعة.
الحملة التي لا تنتمي إلى حسابك تُرجع 404؛ الحملة التي تنتمي إلى حساب آخر لست مخولاً له تُرجع 403. تحرير حملة ليس لها قالب موجود يُرجع 400.
إرسال قالب إلى جهة اتصال موجودة
بديل أبسط ومحدد النطاق حسب المسار لـ إرسال قالب إلى جهة اتصال أعلاه: يجب أن يكون كل من القالب وجهة الاتصال موجودين بالفعل — لا يتم البحث عن أي شيء بالاسم أو إنشاؤه أثناء التنفيذ.
POST /whatsapp-templates/{templateId}/send-to-contact
| الحقل | مطلوب | الوصف |
|---|---|---|
contactId |
نعم | معرف جهة الاتصال. يجب أن ينتمي إلى حسابك. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "contactId": "contact123" }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ contactId: "contact123" }),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/send-to-contact",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"contactId": "contact123"},
)
data = res.json()
الاستجابة
{
"success": true,
"data": "WhatsApp template message sent successfully"
}
الرصيد: الإرسال يستهلك رصيداً، ويتم تسعيره بنفس طريقة نقطة النهاية أعلاه.
contactIdالمفقود أو غير الموجود في حسابك يُرجع403؛templateIdغير الموجود يُرجع404.
إرسال قالب بالجملة
أرسل قالباً واحداً إلى العديد من جهات الاتصال في طلب واحد، مع معاينة للتكلفة يمكنك عرضها قبل التأكيد.
تقدير التكلفة أولاً
يعيد تكلفة الإرسال، مقسمة حسب بلد الوجهة، دون إرسال أي شيء أو خصم أي رصيد. يتم تحديد تسعير القالب لكل بلد وجهة، لذا يجب حساب ذلك من جانب الخادم مقابل جهات الاتصال الحقيقية بدلاً من تقديره من جانب العميل.
POST /whatsapp-templates/{templateId}/estimate-bulk-cost
| الحقل | مطلوب | الوصف |
|---|---|---|
contactIds |
نعم | جهات الاتصال المراد تسعيرها، بحد أقصى 500 لكل طلب. يتم احتساب التكرارات مرة واحدة فقط. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "contactIds": ["contact123", "contact456"] }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/estimate-bulk-cost",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()
الاستجابة
{
"success": true,
"data": {
"countries": [
{
"countryCode": "1",
"name": "United States",
"iso": "US",
"flag": "🇺🇸",
"contactCount": 120,
"costPerContact": 0.5,
"subtotal": 60.0
}
],
"totalContacts": 120,
"totalTemplateCost": 60.0,
"templateCategory": "marketing",
"skippedContacts": 2
}
}
تحسب skippedContacts المعرفات المفقودة، أو التي لا تخصك، أو التي لا تحتوي على رقم هاتف — التقدير يغطي الباقي فقط، لذا فإن القيمة غير الصفرية تعني أن الإرسال الفعلي سيصل إلى عدد أقل من جهات الاتصال التي حددتها.
إرسال الدفعة
يرسل القالب إلى كل جهة اتصال في القائمة، مع حل أي متغيرات ذكية لكل جهة اتصال وخصم الرصيد لكل عملية إرسال.
POST /whatsapp-templates/{templateId}/bulk-send
| الحقل | مطلوب | الوصف |
|---|---|---|
contactIds |
نعم | جهات الاتصال المراد الإرسال إليها، بحد أقصى 5000 لكل طلب. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "contactIds": ["contact123", "contact456"] }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ contactIds: ["contact123", "contact456"] }),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/template_abc123/bulk-send",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"contactIds": ["contact123", "contact456"]},
)
data = res.json()
الاستجابة
{
"success": true,
"data": { "sent": 118, "failed": 2, "total": 120 }
}
يتم تخطي جهة الاتصال التي تفشل (غير موجودة، أو ليست في حسابك، أو حدث خطأ في الإرسال) واحتسابها في failed بدلاً من إيقاف الدفعة. يؤدي وجود contactIds فارغ، أو أكثر من 5000 معرف في عملية إرسال (500 في التقدير)، أو فقدان templateId إلى إرجاع 400.
إعادة محاولة إرسال رسالة فاشلة
نقطتا نهاية لإعادة إرسال رسالة فشلت، دون إنشاء سجل رسالة جديد أو خصم رصيد مرة أخرى.
تعيد POST /whatsapp-templates/messages/{contactId}/{messageId}/retry-template محاولة إرسال رسالة قالب فاشلة تحديداً — فهي تعيد حل محتوى القالب من الحملة إذا لم تكن الرسالة الفاشلة تحمله بالفعل. لا يمكن إعادة محاولة سوى الرسائل التي تحمل الحالة failed والنوع template بهذه الطريقة.
تعد POST /whatsapp-templates/messages/{contactId}/{messageId}/retry محايدة للقناة وتعمل مع أي رسالة فاشلة غير متعلقة بقالب (على سبيل المثال WhatsApp Web)، حيث يتم توجيهها إلى مسار الإرسال الصحيح بناءً على قناة الرسالة. وهي تقبل الحالة failed أو failed_connection أو limit_exceeded أو queued_retry.
لا تتطلب أي من نقطتي النهاية نص طلب.
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
{ method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/messages/contact123/msg_abc789/retry-template",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"data": "Message retry initiated successfully"
}
بالنسبة للإصدار المحايد للقناة، استبدل المسار بـ .../msg_abc789/retry. الرسالة التي لا تكون حالتها مؤهلة لإعادة المحاولة، أو (في نقطة نهاية القالب) التي ليست رسالة قالب، تُرجع 400. جهة الاتصال أو الرسالة المفقودة تُرجع 404.
ملف تعريف WhatsApp Business
إدارة ملف تعريف WhatsApp Business (حول، العنوان، الوصف، البريد الإلكتروني، المواقع الإلكترونية، فئة النشاط التجاري، والشعار) الذي يظهر لجهات الاتصال على WhatsApp. يعمل هذا على كل من الاتصال المُدار والحساب الذي يشغل حساب WhatsApp Business الخاص به.
حفظ ملف التعريف
PUT /whatsapp-templates/profile
| الحقل | مطلوب | الوصف |
|---|---|---|
phoneNumber |
نعم | رقم WhatsApp الذي ينتمي إليه ملف التعريف هذا. يجب أن يكون متصلاً بحسابك. |
about |
لا | نص “حول” قصير يظهر في ملف التعريف. |
address |
لا | عنوان النشاط التجاري. |
description |
لا | وصف أطول للنشاط التجاري. |
email |
لا | البريد الإلكتروني لجهة الاتصال الذي يظهر في ملف التعريف. |
websites |
لا | مصفوفة من روابط المواقع الإلكترونية. يجب أن يكون كل منها رابطاً صالحاً. |
vertical |
لا | فئة النشاط التجاري، على سبيل المثال Retail أو Professional Services. |
profilePictureHandle |
لا | المعرف (handle) الذي تم إرجاعه بواسطة نقطة نهاية تحميل الصورة أدناه، لتعيين صورة ملف التعريف. |
cURL
curl -X PUT "https://api.youraiconnector.com/v1/whatsapp-templates/profile?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phoneNumber": "+31612345678",
"about": "We reply within a few hours",
"email": "support@example.com",
"websites": ["https://example.com"]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile", {
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
phoneNumber: "+31612345678",
about: "We reply within a few hours",
email: "support@example.com",
websites: ["https://example.com"],
}),
});
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/whatsapp-templates/profile",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"phoneNumber": "+31612345678",
"about": "We reply within a few hours",
"email": "support@example.com",
"websites": ["https://example.com"],
},
)
data = res.json()
الاستجابة
{
"success": true,
"data": "WhatsApp Business profile updated successfully"
}
يؤدي فقدان phoneNumber، أو رابط موقع إلكتروني غير صالح، أو phoneNumber غير متصل بحسابك إلى إرجاع 400 أو 404.
تحميل صورة ملف التعريف
يقوم بتنزيل صورة من رابط توفره وتحميلها إلى WhatsApp، مع إرجاع معرف (handle). مرر هذا المعرف كـ profilePictureHandle في طلب حفظ ملف التعريف أعلاه لتعيينها كصورة — تقوم نقطة النهاية هذه بتحميل الصورة فقط، ولا تقوم بتعيينها بنفسها.
POST /whatsapp-templates/profile/picture
| الحقل | مطلوب | الوصف |
|---|---|---|
phoneNumber |
نعم | رقم WhatsApp الذي ينتمي إليه ملف التعريف هذا. |
fileUrl |
نعم | رابط متاح للجمهور للصورة المراد تحميلها. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phoneNumber": "+31612345678",
"fileUrl": "https://example.com/logo.png"
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
phoneNumber: "+31612345678",
fileUrl: "https://example.com/logo.png",
}),
});
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/whatsapp-templates/profile/picture",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"phoneNumber": "+31612345678",
"fileUrl": "https://example.com/logo.png",
},
)
data = res.json()
الاستجابة
{
"success": true,
"data": "1234567890123456"
}
data هو معرف الصورة التي تم تحميلها. يؤدي فقدان phoneNumber أو fileUrl، أو phoneNumber بدون رمز وصول WhatsApp في الملف، إلى إرجاع 400؛ بينما يؤدي وجود fileUrl غير قابل للوصول أو غير صالح إلى إرجاع خطأ يوضح سبب فشل التنزيل.
التحقق من حالة المرسل
يقوم باستطلاع (وتحديث) حالة الإرسال المباشرة لرقم WhatsApp متصل مع مزود المراسلة. مفيد للتأكد من أن الرقم قادر فعلياً على الإرسال قبل الاعتماد عليه.
GET /whatsapp-templates/sender-status/{phoneNumber}
cURL
curl "https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/whatsapp-templates/sender-status/+31612345678",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
الاستجابة
{
"success": true,
"data": "ONLINE"
}
data هي واحدة من ONLINE (يرسل بشكل طبيعي)، أو PENDING (لا يزال قيد التحقق)، أو DELETED (لم يعد المزود يتعرف على هذا المرسل — أعد توصيل الرقم). يؤدي وجود phoneNumber بدون معلومات WhatsApp Business في الملف إلى إرجاع 404.
إنشاء قوالب المتابعة باستخدام الذكاء الاصطناعي
يمكن للمنصة كتابة قوالب متابعة WhatsApp للحملة نيابةً عنك — وهي التنبيهات التي يتم إرسالها عندما تصبح المحادثة هادئة — وذلك بناءً على تعليمات الحملة وهدفها. توجد نقطة نهاية واحدة للمهمة تعمل في الخلفية، بالإضافة إلى ثلاث نقاط نهاية قديمة تم الاحتفاظ بها لعمليات التكامل الحالية. جميعها تستخدم أرصدة الذكاء الاصطناعي.
بدء مهمة إنشاء
POST /campaigns/{campaignId}/template-generation
| الحقل | مطلوب | الوصف |
|---|---|---|
type |
لا | all (الافتراضي) يكتب مجموعة المتابعة الكاملة. cold_only يكتب فقط الرسائل لجهات الاتصال التي لم ترد مطلقاً. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "type": "all" }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ type: "all" }),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/campaigns/campaign_abc123/template-generation",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"type": "all"},
)
data = res.json()
الاستجابة (202)
{ "success": true, "campaign_id": "campaign_abc123", "type": "all" }
يعود الاستدعاء بمجرد وضع المهمة في قائمة الانتظار. اقرأ الحملة (GET /campaigns/{campaignId}، راجع واجهة برمجة تطبيقات الحملات) وراقب كائن template_generation_status الخاص بها حتى تنتهي:
| الحقل | الوصف |
|---|---|
status |
processing أثناء تشغيل المهمة، ثم completed أو failed. |
progress |
من 0 إلى 100. |
current_template, total_templates |
عدد القوالب التي تمت كتابتها حتى الآن، من إجمالي عدد القوالب التي ستكتبها المهمة — 11 لحملة صادرة أو مدمجة، و9 بخلاف ذلك. |
error |
سبب توقف مهمة failed، على سبيل المثال عدم كفاية الأرصدة. |
started_at, completed_at |
متى بدأت المهمة وانتهت. |
تصل القوالب التي تم إنشاؤها إلى الحملة مثل أي قوالب أخرى، لذا فهي تظهر في قائمة القوالب وتخضع لموافقة WhatsApp قبل إمكانية إرسالها. تعني 400 أن type كان شيئاً آخر غير all أو cold_only؛ وتعني 404 أن الحملة غير موجودة أو تنتمي إلى حساب آخر.
لدى الوكلاء نسخة مطابقة لهذا الاستدعاء، POST /agents/{agentId}/template-generation، والتي تكتب المتابعات لوكيل وتنتهي أثناء الاستدعاء في الحالة المعتادة — راجع إنشاء رسائل المتابعة في واجهة برمجة تطبيقات وكلاء الذكاء الاصطناعي.
نقاط نهاية الإنشاء القديمة
تقوم ثلاث نقاط نهاية سابقة بنفس العمل ويتم الاحتفاظ بها لضمان استمرار عمل عمليات التكامل الحالية. يجب أن يستخدم الكود الجديد نقطة نهاية المهمة المذكورة أعلاه.
| نقطة النهاية | ما تقوم به |
|---|---|
POST /whatsapp-templates/campaign/{campaignId}/generate-async |
تبدأ إنشاء المتابعة للحملة في الخلفية وتعيد 202 مع { "success": true, "data": { "result": "success", "message": "..." } }. يتم خصم الأرصدة مقدماً (يتم تخطي ذلك في الحساب الذي يوفر مفتاح الذكاء الاصطناعي الخاص به) ويقوم template_generation_status الخاص بالحملة بالإبلاغ عن التقدم تماماً كما هو موضح أعلاه. |
POST /whatsapp-templates/campaign/{campaignId}/generate-followups |
تنشئ جميع قوالب المتابعة التسعة أثناء الاستدعاء — لحملة تم إنشاؤها قبل وجود المتابعات التلقائية، أو حملة تحتاج إلى إعادة كتابتها — وتعيد 200 مع templatesGenerated داخل data. |
POST /whatsapp-templates/agent/{agentId}/generate-followups |
نفس الإنشاء المتزامن الذي يتم معالجته بواسطة الوكيل. تضيف الاستجابة agent_id وcampaign_id وtarget: "campaign" عندما تمت كتابة القوالب على حملة الوكيل، و"agent" (مع campaign_id: null) عندما لا يكون لدى الوكيل حملة وتم تخزينها على الوكيل نفسه. الوكيل المفقود أو الأجنبي هو 404. |
تتطلب جميع النقاط الثلاث تفعيل المتابعات التلقائية على الحساب ووجود أرصدة كافية — تحدد 400 ما هو مفقود — ويعيد الزوج الموجه للحملة 403 عندما تنتمي الحملة إلى حساب آخر.
أخطاء واجهة برمجة تطبيقات القوالب
تُرجع نقاط نهاية القوالب غلاف الخطأ القياسي:
{
"success": false,
"error": "Template not found"
}
عادةً ما يعني ظهور 404 في نقاط النهاية هذه أن المورد لم يتم العثور عليه — إما لأنه غير موجود أو لأنه ينتمي إلى حساب آخر. تُرجع بعض نقاط النهاية (الإنشاء/التحديث على مستوى الحملة، والإرسال إلى جهة اتصال موجودة) 403 بدلاً من ذلك عندما تنتمي الحملة أو جهة الاتصال لشخص آخر بدلاً من عدم وجودها على الإطلاق. تتضمن بعض نقاط النهاية أيضاً حقل error_code يعكس حالة HTTP. الرموز المشتركة التي يمكن أن تُرجعها أي نقطة نهاية — 400، و401، و403 (خطتك لا تتضمن الوصول إلى واجهة برمجة التطبيقات)، و429 (حد المعدل)، و500 — مدرجة مع إرشادات إعادة المحاولة في الأخطاء والترقيم.
الخطوات التالية
- المصادقة — الطرق الأربع لمصادقة الطلب.
- الأخطاء وحدود المعدل — رموز الحالة وحد 300 طلب/دقيقة.
- واجهة برمجة تطبيقات الحملات — إدارة الحملات التي يتم إرفاق القوالب بها.