القوالب
قوالب واتساب المعتمدة: اعرف ما يحتاجه كل قالب وأنشئ قوالب جديدة.
القالب رسالة اعتمدها واتساب مسبقًا. وهو الطريقة الوحيدة لبدء محادثة أو للكتابة بعد نافذة الـ24 ساعة، لذلك تستخدمه تحديثات الطلبات والتذكيرات ورموز التحقق والحملات.
كيف يعمل: القوالباعرف ما يحتاجه القالب · أرسل قالبًا · أنشئ قالبًا · الاعتماد · احذف قالبًا
اعرف ما يحتاجه القالب#
يعرض GET /templates قوالبك، ويوضح كل قالب ما يجب تعبئته عند الإرسال:
{
"id": "tpl_27",
"name": "order_update",
"language": "ar",
"status": "approved",
"variables": { "body": 2, "buttons": [{ "index": 0, "type": "url" }] },
"send_example": {
"type": "template",
"template": {
"name": "order_update",
"language": "ar",
"variables": { "body": ["value 1", "value 2"], "buttons": { "0": { "url_suffix": "value" } } }
}
}
}send_example جسم جاهز لـ POST /messages: أضف to واستبدل القيم ثم أرسل. لا يمكن إرسال إلا القوالب ذات الحالة approved.
أرسل قالبًا#
{
"to": "+966501234567",
"type": "template",
"template": {
"name": "order_update",
"language": "ar",
"variables": {
"body": ["سارة", "#10482"],
"buttons": { "0": { "url_suffix": "10482" } }
}
}
}| المتغير | ما يعبّئه |
|---|---|
body | المتغيرات {{1}} و{{2}}… في نص القالب، بالترتيب |
header_text | المتغير {{1}} في ترويسة نصية |
header_media_link | ترويسة صورة أو فيديو أو مستند، كرابط https:// عام |
buttons | حسب ترتيب الزر: url_suffix (المتغير {{1}} في زر الرابط)، وcoupon_code (زر نسخ الرمز)، وpayload (زر الرد السريع) |
يُرفض العدد الخاطئ لقيم النص فورًا بالخطأ template_variables_mismatch، بدل أن يفشل لاحقًا عند واتساب.
أنشئ قالبًا#
يرسل POST /templates القالب إلى واتساب. يأخذ مكوّنات واتساب نفسها، ويحتاج كل متغير {{n}} إلى قيمة مثال:
{
"name": "order_shipped",
"language": "ar",
"category": "utility",
"components": [
{
"type": "BODY",
"text": "مرحبًا {{1}}، شُحن طلبك رقم {{2}} وسيصلك خلال يومين.",
"example": { "body_text": [["سارة", "10482"]] }
},
{
"type": "BUTTONS",
"buttons": [
{ "type": "URL", "text": "تتبّع الشحنة", "url": "https://shop.example.com/track/{{1}}", "example": ["https://shop.example.com/track/10482"] }
]
}
]
}- الفئات.
utilityلشيء ينتظره العميل (طلب أو موعد)، وmarketingللعروض الترويجية، وauthenticationللرموز لمرة واحدة وتأخذotpبدلcomponents. - ترويسات الوسائط. ارفع الملف عبر
POST /mediaوضع معرّفهmed_…فيexample.header_handleللترويسة: نسلّمه نحن إلى واتساب، وتستخدم الإرسالات اللاحقة هذا الملف ما لم ترسلheader_media_link. - الفحوص أولًا. تُفحص صيغة الاسم (حروف صغيرة وأرقام و
_)، وأطوال المكوّنات، وعدد الأزرار، وقائمة اللغات، وتفرّد الاسم على حساب واتساب للرقم، قبل أن يصل أي شيء إلى واتساب.
الاعتماد#
يبدأ القالب الجديد بحالة pending. عادةً يقرر واتساب خلال دقائق، وأحيانًا حتى 24 ساعة، ويصلك حدث template.status_changed:
| الحالة | المعنى |
|---|---|
approved | جاهز للإرسال |
rejected | مرفوض، ويذكر rejection_reason سبب واتساب إن أعطى سببًا |
paused | أوقفه واتساب مؤقتًا بعد ملاحظات سلبية |
disabled | أُوقف نهائيًا |
قد ينقل واتساب قالبًا معتمدًا إلى فئة أخرى (مثلًا من utility إلى marketing)، فيتغير سعره. يعرض الحقل category دائمًا الفئة الحالية.
احذف قالبًا#
يحذف DELETE /templates/{id} القالب هنا وفي واتساب. يُرفض ما دامت حملة مجدولة أو جارية تستخدمه. ولا يسمح واتساب باستخدام الاسم نفسه مجددًا لمدة 30 يومًا.
نقاط الواجهة
عرض القوالب
https://api.saei.automize.sa/v1/templates- الصلاحية:
templates:read - يعمل في وضع الاختبار
قوالب رسائل واتساب الخاصة بك. يوضّح كل قالب ما يحتاج تعبئته (variables) ويحمل send_example جاهزًا للصق في POST /v1/messages.
معاملات الاستعلام
limitintegerاختياريعدد العناصر المطلوبة، من 1 إلى 100.
cursorstringاختياريقيمة
next_cursorمن الصفحة السابقة.statusstringاختياريإحدى القيم
approvedpendingrejectedpauseddisableddraftcategorystringاختياريإحدى القيم
marketingutilityauthenticationlanguagestringاختياريرمز لغة، مثل
arأوen_US.namestringاختيارياسم القالب بالضبط.
حقول الاستجابة200· صفحة من القوالب.
object"list"مطلوبdataarray<Template>مطلوبالحقول الفرعية (12)
idstringمطلوبobject"template"مطلوبnamestringمطلوبlanguagestring | nullمطلوبcategorystring | nullاختياريإحدى القيم
marketingutilityauthenticationnullstatusstringمطلوبلا يمكن إرسال إلا القوالب ذات الحالة
approved.rejection_reasonstring | nullاختياريcomponentsarrayمطلوبHEADER وBODY وFOOTER وBUTTONS كما يحفظها واتساب تمامًا.
variablesobjectمطلوبما يجب تعبئته عند الإرسال:
header(نوع الترويسة التي تحتاج قيمة)، وbody(عدد المتغيرات {{n}})، وbuttons(الأزرار التي تحتاج قيمة).الحقول الفرعية (3)
headerstringاختياريbodyintegerاختياريbuttonsarray<object>اختياريالحقول الفرعية (2)
indexintegerاختياريtypestringاختياري
send_exampleobjectمطلوبجسم طلب
POST /v1/messagesلهذا القالب بقيم تجريبية. أضفtoوقيمك.created_atstring | nullاختياريupdated_atstring | nullاختياري
has_morebooleanمطلوبnext_cursorstring | nullمطلوب
الأخطاء المحتملة2
- 422parameter_invalidحقل غير صالح
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X GET https://api.saei.automize.sa/v1/templates \
-H "Authorization: Bearer $API_KEY"صفحة من القوالب.
{
"object": "list",
"data": [
{
"id": "tpl_27",
"object": "template",
"name": "string",
"language": "string",
"category": "marketing",
"status": "string",
"rejection_reason": "string",
"components": [],
"variables": {
"header": "string",
"body": 0,
"buttons": [
{
"index": null,
"type": null
}
]
},
"send_example": {},
"created_at": "2026-10-01T09:30:00Z",
"updated_at": "2026-10-01T09:30:00Z"
}
],
"has_more": false,
"next_cursor": "string"
}إنشاء قالب
https://api.saei.automize.sa/v1/templates- الصلاحية:
templates:write - لمفاتيح التشغيل فقط
- يقبل Idempotency-Key
يرسل قالبًا جديدًا إلى واتساب لاعتماده. يعود بحالة pending، وعادةً يقرر واتساب خلال دقائق (وأحيانًا حتى 24 ساعة)، ويصلك حدث template.status_changed عند القرار.
components هي مكوّنات واتساب نفسها: HEADER وBODY (إلزامي) وFOOTER وBUTTONS. يحتاج كل متغير {{n}} إلى قيمة example، وإلا رفض واتساب القالب. تُجرى فحوص منشئ القوالب أولًا (الأطوال، عدد الأزرار، قائمة اللغات، تفرّد الاسم لكل حساب واتساب)، فتعود معظم الأخطاء فورًا كـ parameter_invalid.
لترويسة صورة أو فيديو أو مستند، ارفع الملف عبر POST /v1/media وضع معرّفه med_… في example.header_handle: نسلّمه نحن إلى واتساب، ويُرسل القالب بهذا الملف افتراضيًا.
قوالب التحقق (OTP) تأخذ otp بدل components، وتحتاج باقة تشمل التحقق عبر OTP ونشاطًا تجاريًا موثّقًا من Meta.
الترويسات
Idempotency-Keystringاختياريأي نص فريد (يُفضّل UUID). إعادة الطلب بنفس المفتاح ونفس الجسم تُرجع الاستجابة الأولى بدل التنفيذ مرتين. يُحفظ لمدة 24 ساعة.
جسم الطلب
namestringمطلوبحروف إنجليزية صغيرة وأرقام وشرطة سفلية، مثل
order_shipped.languagestringمطلوبcategorystringمطلوبإحدى القيم
marketingutilityauthenticationnumber_idstringاختياريأي رقم يحتفظ حساب واتساب الخاص به بالقالب. الافتراضي: رقمك الافتراضي.
componentsarrayاختياريمكوّنات قالب واتساب (HEADER وBODY وFOOTER وBUTTONS)، ولكل متغير
{{n}}قيمةexample.otpobjectاختياريلفئة
authentication:button_text(مثل "نسخ الرمز")، واختياريًاcode_expiration_minutesوshow_security_recommendation.
حقول الاستجابة201· أُرسل إلى واتساب، والحالة `pending`.
idstringمطلوبobject"template"مطلوبnamestringمطلوبlanguagestring | nullمطلوبcategorystring | nullاختياريإحدى القيم
marketingutilityauthenticationnullstatusstringمطلوبلا يمكن إرسال إلا القوالب ذات الحالة
approved.rejection_reasonstring | nullاختياريcomponentsarrayمطلوبHEADER وBODY وFOOTER وBUTTONS كما يحفظها واتساب تمامًا.
variablesobjectمطلوبما يجب تعبئته عند الإرسال:
header(نوع الترويسة التي تحتاج قيمة)، وbody(عدد المتغيرات {{n}})، وbuttons(الأزرار التي تحتاج قيمة).الحقول الفرعية (3)
headerstringاختياريbodyintegerاختياريbuttonsarray<object>اختياريالحقول الفرعية (2)
indexintegerاختياريtypestringاختياري
send_exampleobjectمطلوبجسم طلب
POST /v1/messagesلهذا القالب بقيم تجريبية. أضفtoوقيمك.created_atstring | nullاختياريupdated_atstring | nullاختياري
الأخطاء المحتملة9
- 403capability_disabledالميزة موقوفة
- 403test_mode_unsupportedغير متاح في وضع الاختبار
- 422parameter_missingحقل مفقود
- 422parameter_invalidحقل غير صالح
- 404resource_missingغير موجود
- 422sender_not_configuredلا يوجد رقم مُرسِل
- 422channel_errorرفض واتساب الرسالة
- 409resource_existsموجود مسبقًا
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X POST https://api.saei.automize.sa/v1/templates \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "order_shipped",
"language": "ar",
"category": "utility",
"components": [
{
"type": "BODY",
"text": "مرحبًا {{1}}، شُحن طلبك رقم {{2}} وسيصلك خلال يومين.",
"example": {
"body_text": [
[
"سارة",
"10482"
]
]
}
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "تتبّع الشحنة",
"url": "https://shop.example.com/track/{{1}}",
"example": [
"https://shop.example.com/track/10482"
]
}
]
}
]
}'أُرسل إلى واتساب، والحالة `pending`.
{
"id": "tpl_27",
"object": "template",
"name": "string",
"language": "string",
"category": "marketing",
"status": "string",
"rejection_reason": "string",
"components": [],
"variables": {
"header": "string",
"body": 0,
"buttons": [
{
"index": 0,
"type": "string"
}
]
},
"send_example": {},
"created_at": "2026-10-01T09:30:00Z",
"updated_at": "2026-10-01T09:30:00Z"
}جلب قالب
https://api.saei.automize.sa/v1/templates/{id}- الصلاحية:
templates:read - يعمل في وضع الاختبار
قالب واحد ومكوّناته كما اعتمدها واتساب، وسبب الرفض من واتساب للقالب المرفوض إن ذكره.
معاملات المسار
idstringمطلوبمعرّف العنصر.
حقول الاستجابة200· القالب.
idstringمطلوبobject"template"مطلوبnamestringمطلوبlanguagestring | nullمطلوبcategorystring | nullاختياريإحدى القيم
marketingutilityauthenticationnullstatusstringمطلوبلا يمكن إرسال إلا القوالب ذات الحالة
approved.rejection_reasonstring | nullاختياريcomponentsarrayمطلوبHEADER وBODY وFOOTER وBUTTONS كما يحفظها واتساب تمامًا.
variablesobjectمطلوبما يجب تعبئته عند الإرسال:
header(نوع الترويسة التي تحتاج قيمة)، وbody(عدد المتغيرات {{n}})، وbuttons(الأزرار التي تحتاج قيمة).الحقول الفرعية (3)
headerstringاختياريbodyintegerاختياريbuttonsarray<object>اختياريالحقول الفرعية (2)
indexintegerاختياريtypestringاختياري
send_exampleobjectمطلوبجسم طلب
POST /v1/messagesلهذا القالب بقيم تجريبية. أضفtoوقيمك.created_atstring | nullاختياريupdated_atstring | nullاختياري
الأخطاء المحتملة2
- 404resource_missingغير موجود
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X GET https://api.saei.automize.sa/v1/templates/tpl_27 \
-H "Authorization: Bearer $API_KEY"القالب.
{
"id": "tpl_27",
"object": "template",
"name": "order_update",
"language": "ar",
"category": "utility",
"status": "approved",
"rejection_reason": null,
"components": [
{
"type": "BODY",
"text": "مرحبًا {{1}}، طلبك {{2}} في الطريق."
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "تتبّع الطلب",
"url": "https://shop.example.com/track/{{1}}"
}
]
}
],
"variables": {
"body": 2,
"buttons": [
{
"index": 0,
"type": "url"
}
]
},
"send_example": {
"type": "template",
"template": {
"name": "order_update",
"language": "ar",
"variables": {
"body": [
"value 1",
"value 2"
],
"buttons": [
{
"url_suffix": "value"
}
]
}
}
},
"created_at": "2026-08-01T10:00:00Z",
"updated_at": "2026-08-02T07:30:00Z"
}حذف قالب
https://api.saei.automize.sa/v1/templates/{id}- الصلاحية:
templates:write - لمفاتيح التشغيل فقط
يحذف القالب هنا وفي واتساب. يُرفض بـ resource_in_use ما دامت حملة مجدولة أو جارية تستخدمه. لا يسمح واتساب بإعادة استخدام الاسم نفسه لمدة 30 يومًا.
معاملات المسار
idstringمطلوبمعرّف العنصر.
حقول الاستجابة200· تم الحذف.
idstringمطلوبobjectstringمطلوبdeletedtrueمطلوب
الأخطاء المحتملة4
- 403test_mode_unsupportedغير متاح في وضع الاختبار
- 404resource_missingغير موجود
- 409resource_in_useما زال مستخدمًا
- 429rate_limitedطلبات كثيرة
جرّبها
curl -X DELETE https://api.saei.automize.sa/v1/templates/tpl_27 \
-H "Authorization: Bearer $API_KEY"تم الحذف.
{
"id": "tpl_27",
"object": "template",
"deleted": true
}