We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
يتم استخدام القوالب عند إرسال رسائل القوالب من خلال API السحابة المستضافة من Meta أو API داخل المواقع. تراجع API السحابة القوالب والمعلمات المتغيرة باستخدام تعلّم الآلة لحماية أمان خدمات API السحابة وسلامتها. عندما تراجع API السحابة القوالب ونص المتغير، لا تتم مشاركة أي معلومات مع واتساب.
يمكن إنشاء القوالب باستخدام API إدارة الأعمال أو حساب مدير واتساب للأعمال. يتم تحديد عدد القوالب التي يمكن أن يمتلكها حساب واتساب للأعمال حسب النشاط التجاري الأصل. إذا لم يتم التحقق من النشاط التجاري الأصل، فسيتم تقييد كل حساب من حسابات واتساب للأعمال عند 250 قالبًا. مع ذلك، إذا تم التحقق من النشاط التجاري الأصل وكان أحد حسابات واتساب للأعمال على الأقل لديه رقم هاتف نشاط تجاري مع اسم عرض تمت الموافقة عليه، فيمكن أن يحصل كل حساب من حسابات واتساب للأعمال على ما يصل إلى 6,000 قالب.
ستحتاج إلى ما يلي:
يمكنك إضافة قالب رسالة بلغة محددة عند إنشاء القالب. ويتم احتساب هذه القوالب ضمن التقييد. حافظ على الاتساق عند توفير الترجمات. راجع مقالة مركز المساعدة لماذا تظهر لي أخطاء "عدم توفر البنية" في عملية الاستدعاء التي أجريها؟ لمزيد من المعلومات.
أرسل طلب POST إلى نقطة النهاية حساب واتساب للأعمال > قوالب الرسائل لإنشاء القالب.
POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates
{ "name": "<NAME>", "category": "<CATEGORY>", "allow_category_change": <ALLOW_CATEGORY_CHANGE>, "language": "<LANGUAGE>", "components": [<COMPONENTS>] }
العنصر النائب | الوصف | عينة من القيمة |
---|---|---|
String (سلسلة) | مطلوب. اسم القالب. بحد أقصى 512 حرفًا. |
|
Enum (تعداد) | مطلوب. فئة القالب. راجع فئات القوالب أدناه. |
|
Boolean (قيمة منطقية) | اختياري. يمكنك التعيين على true للسماح لنا بتعيين فئة تلقائيًا. إذا تم الحذف، فقد يتم رفض القالب نتيجة التصنيف الخاطئ. |
|
Enum (تعداد) | مطلوب. |
|
String (سلسلة) | اختياري. الاسم الدقيق لقالب مكتبة قالب المساعدة. تعرف على كيفية إنشاء القوالب باستخدام مكتبة قالب المساعدة |
|
(Array of objects) مصفوفة كائنات | مطلوب. المكونات التي تشكل القالب. راجع مكونات القالب أدناه. | راجع مكونات القالب أدناه. |
العنصر النائب | الوصف | عينة من القيمة |
---|---|---|
كائن JSON | اختياري. البيانات الاختيارية أثناء إنشاء قالب من مكتبة القوالب. هذه حقول اختيارية لمكون الزر. ملاحظة: بالنسبة إلى قوالب المساعدة التي تحتوي على الأزرار، هذه الخاصية ليست اختيارية. |
|
enum (تعداد) | نوع الزر QUICK_REPLY، URL، PHONE_NUMBER، OTP، MPM، CATALOG، FLOW، VOICE_CALL، APP مطلوب |
|
String (سلسلة) | رقم هاتف الزر. اختياري |
|
كائن JSON | عرض معلمات عنوان URL لكائن JSON اختياري | |
boolean (قيمة منطقية) | سواء تم قبول شروط المعالجة بدون ضغطات إضافية من قبل المستخدم أم لا. اختياري |
|
enum (تعداد) | نوع كلمة المرور لمرة واحدة. COPY_CODE، ONE_TAP، ZERO_TAP اختياري |
|
(Array of JSON Object) مصفوفة كائنات JSON | عرض معلمات التطبيقات المدعومة لدى كائن JSON اختياري |
العنصر النائب | الوصف | عينة من القيمة |
---|---|---|
كائن JSON | اختياري. البيانات الاختيارية أثناء إنشاء قالب من مكتبة القوالب. هذه حقول اختيارية لمكون الزر. | |
قيمة منطقية | قيمة منطقية لإضافة معلومات إلى القالب حول الاتصال بالنشاط التجاري على رقم الهاتف التابع له. اختياري |
|
boolean (قيمة منطقية) | قيمة منطقية لإضافة معلومات إلى القالب حول التعرف على المزيد من المعلومات من خلال رابط url. وهي غير متوفرة على نطاق واسع وسيتم تجاهلها إذا لم تكن متاحة. اختياري |
|
boolean (قيمة منطقية) | قيمة منطقية لإضافة معلومات إلى القالب حول عدم مشاركة رموز المصادقة مع أي شخص. اختياري |
|
boolean (قيمة منطقية) | قيمة منطقية لإضافة معلومات إلى القالب لتتبع طرود التسليم. وهي غير متوفرة على نطاق واسع وسيتم تجاهلها إذا لم تكن متاحة. اختياري |
|
int64 | قيمة من عدد صحيح لإضافة معلومات إلى القالب حول موعد انتهاء صلاحية الرمز. اختياري |
|
يجب تصنيف القوالب بإحدى الفئات التالية. تلعب الفئات دورًا في التسعير وسيتم التحقق من صلاحية الفئة التي تحددها في وقت إنشاء القالب.
AUTHENTICATION
MARKETING
UTILITY
يُرجى الرجوع إلى مستند تصنيف القالب لتحديد الفئة المطلوب استخدامها عند إنشاء القوالب.
تتكون القوالب من مكونات تفاعلية ونصوص ووسائط متعددة استنادًا إلى احتياجات النشاط التجاري. راجع المستند مكونات القوالب للحصول على قائمة بكل المكونات الممكنة ومتطلباتها بالإضافة إلى العينات وأمثلة على الاستعلامات.
عند إنشاء قالب، حدّد المكونات من خلال تعيين مصفوفة كائنات المكون على الخاصية components في نص الطلب.
على سبيل المثال، فيما يلي مصفوفة تحتوي على مكون نص أساسي بمتغيرين وعينات قيم، ومكون زر رقم الهاتف ومكون زر عنوان URL:
[ { "type": "BODY", "text": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!", "example": { "body_text": [ [ "Pablo","860198-230332" ] ] } }, { "type": "BUTTONS", "buttons": [ { "type": "PHONE_NUMBER", "text": "Call", "phone_number": "15550051310" }, { "type": "URL", "text": "Contact Support", "url": "https://www.luckyshrub.com/support" } ] } ]
راجع المستند مكونات القوالب للحصول على قائمة بكل المكونات الممكنة ومتطلباتها بالإضافة إلى العينات وأمثلة على الاستعلامات.
لاحظ أن القوالب التي تم تصنيفها كـ AUTHENTICATION
تتمتع بمتطلبات مكونات فريدة. راجع قوالب المصادقة.
عند إرسال طلب إنشاء قالب، يتم التحقق من الفئة فورًا باستخدام إرشادات تصنيف القالب.
status
على PENDING
. ثم يخضع القالب إلى عملية مراجعة القالب.status
على REJECTED
وتشغيل حدث webhook تحديث حالة قالب الرسالة مع تعيين reason
على INCORRECT_CATEGORY
. نوصي باتباع حدث webhook هذا لتحديد القوالب المرفوضة أو طلب الحقل rejected_reason
في القوالب التي تم إنشاؤها مؤخرًا، والتي ستكون لها القيمة TAG_CONTENT_MISMATCH
.في كلتا الحالتين، يتم إرجاع الحالة الأولية للقالب كجزء من استجابة API.
إذا تم تعيين حالة القالب على REJECTED
كجزء من عملية التحقق من الفئة، فسيكون لديك خيارات متعددة:
يمكنك تضمين الخاصية allow_category_change
في الطلب لكي نقوم تلقائيًا بتعيين الفئة استنادًا إلى محتويات القالب وإرشادات تصنيف القالب. بإمكان ذلك منع تعيين حالة القالب على الفور على REJECTED
بسبب سوء التصنيف.
لاحظ أنه يمكن فقط تمكين التصنيف التلقائي عند إنشاء قالب.
تخضع القوالب ذات الحالة PENDING
إلى مراجعة القالب. تتم مراجعة محتويات كل قالب تم تعديله أو إنشاؤه مؤخرًا للتأكد من امتثاله لإرشادات وسياسات المحتوى. استنادًا إلى نتائج هذه المراجعة، سنعمل تلقائيًا على تغيير الحالة إلى APPROVED
أو REJECTED
، والتي تعمل على تشغيل حدث webhook تحديث حالة قالب الرسالة.
استنادًا إلى نتائج التحقق من الفئة ومراجعة القالب، نعمل على تعيين status
أو تغييرها للقالب إلى إحدى القيم التالية:
APPROVED
— اجتاز القالب مراجعة القالب وتمت الموافقة عليه، ويمكن الآن إرساله في رسائل القالب.PENDING
— اجتاز القالب التحقق من الفئة ويخضع لمراجعة القالب.REJECTED
— فشل القالب في اجتياز التحقق من الفئة أو مراجعة القالب. يمكنك طلب الحقل rejected_reason في القالب للحصول على السبب.راجع مرجع نقطة النهاية قالب رسالة واتساب لمعرفة كل الحقول والحالات المحتملة.
عند نجاح العملية، تستجيب API بمعرف وحالة وفئة القالب الذي تم إنشاؤه مؤخرًا. توجد ثلاث نتائج محتملة:
status
تكون PENDING
).status
تكون REJECTED
)status
تكون APPROVED
). هذا غير ممكن إلا لقوالب المصادقة التي تتضمن أزرار كلمة السر لمرة واحدة.{ "id": "<ID>", "status": "<STATUS>", "category": "<CATEGORY>" }
العنصر النائب | الوصف | عينة من القيمة |
---|---|---|
| معرف القالب. |
|
|
| |
| فئة القالب التي حددتها أو التي قمنا بتعيينها. |
|
فيما يلي مثال على طلب إنشاء قالب عرض ترويجي موسمي يتكون من المكونات التالية:
للحصول على أمثلة إضافية، راجع أمثلة الطلبات.
curl 'https://graph.facebook.com/v21.0
/102290129340398/message_templates' \
-H 'Authorization: Bearer EAAJB...' \
-H 'Content-Type: application/json' \
-d '
{
"name": "seasonal_promotion",
"language": "en_US",
"category": "MARKETING",
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Summer Sale"
]
}
},
{
"type": "BODY",
"text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
"example": {
"body_text": [
[
"the end of August","25OFF","25%"
]
]
}
},
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
},
{
"type":"BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from Promos"
},
{
"type":"QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
]
}'
{ "id": "572279198452421", "status": "PENDING", "category": "MARKETING" }
استخدم API السحابة أو API داخل المواقع لإرسال قالب في رسالة قالب.
إذا تعذر عليك تسليم الرسالة إلى مستخدم واتساب، فسنعيد محاولة التسليم لفترة من الزمن تُسمى فترة الصلاحية (TTL) أو فترو صلاحية الرسالة.
يمكنك تخصيص فترة الصلاحية (TTL) الافتراضية لقوالب المصادقة والمساعدة والتسويق.
نوصي بتعيين فترة الصلاحية لكل قوالب المصادقة، ويُفضل أن تكون مساوية لوقت انتهاء صلاحية الرمز أو أقل منه، لضمان حصول العملاء على الرسالة فقط عندما لا يزال الرمز قابلاً للاستخدام.
المصادقة | المساعدة | التسويق | |
---|---|---|---|
فترة الصلاحية (TTL) الافتراضية | 10 دقائق | 30 يومًا | 30 يومًا |
التوافق | API السحابة + API داخل المواقع | API السحابة فقط | Lite API للرسائل التسويقية (MM) |
النطاق القابل للتخصيص | من 30 ثانية إلى 15 دقيقة | من 30 ثانية إلى 12 ساعة | 12 ساعة إلى 30 يومًا |
قوالب المصادقة التي تم إنشاؤها قبل 23 أكتوبر 2024 لديها فترة صلاحية افتراضية مدتها 30 يومًا.
لتعيين فترة صلاحية مخصصة في قالب مصادقة أو مساعدة أو تسويق، يجب تضمين قيمة الخاصية message_send_ttl_seconds
وتعيينها في استدعاء POST /<PHONE_NUMBER_ID>/messages
.
يمكن تخصيص فترة الصلاحية بزيادات قدرها ثانية واحدة.
message_send_ttl_seconds
الصالحة30
إلى 900
ثانية (من 30 ثانية إلى 15 دقيقة) 30
إلى 43200
ثانية (من 30 ثانية إلى 12 ساعة)43200
إلى 2592000
(من 12 ساعة إلى 30 يومًا)بالنسبة لقوالب المصادقة والمساعدة، يمكنك تعيين قيمة الخاصية message_send_ttl_seconds
على -1
، ما سيؤدي إلى تعيين فترة صلاحية افتراضية مدتها 30 يومًا.
سيتم تجاهل الرسائل التي يتعذر تسليمها ضمن فترة الصلاحية الافتراضية أو المخصصة.
إذا لم تستلم حدث webhook للرسالة التي تم تسليمها قبل تجاوز فترة الصلاحية، فافترض أنه قد تم تجاهل الرسالة.
إذا أرسلت رسالة وتعذر تسليمها، فقد يكون هناك تأخير بسيط قبل استلامك لحدث webhook، لذا يمكنك توفير فترة مؤقتة إضافية قبل افتراض أن الرسالة قد تم تجاهلها.
نوصي بإضافة زر الرد السريع إلى قوالب تم تصنيفها كـ MARKETING
التي تعمل على تسهيل إلغاء اشتراك العملاء من الرسائل التسويقية. هذا يعطي للعملاء خيار إلغاء اشتراك الرسائل التسويقية دون الحاجة إلى حظر النشاط التجاري. نتيجة لذلك، قد تتمكن من زيادة معدل الرسائل بشكل أسرع. يُرجى الرجوع إلى هذه المقالة لمزيد من التفاصيل حول مزايا إضافة زر إلغاء اشتراك إلى قوالب التسويق.
يجب أن يتخذ نشاطك التجاري الخطوات اللازمة للتوقف عن إرسال الرسائل التسويقية إلى العملاء الذين اختاروا إلغاء الاشتراك في تلقي هذه الرسائل. سيؤثر عدم القيام بذلك سلبًا على معدل الحظر ونقاط الجودة لديك.
أرسل طلب GET إلى نقطة النهاية حساب واتساب للأعمال > قوالب الرسالة للحصول على قائمة القوالب المملوكة لحساب واتساب للأعمال.
GET /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?fields=<FIELDS> &limit=<LIMIT>
العنصر النائب | الوصف | عينة من القيمة |
---|---|---|
قائمة مفصولة بفاصلة | اختياري. قائمة حقول القوالب التي تريد إرجاعها. |
|
Integer (عدد صحيح) | اختياري. الحد الأقصى لعدد القوالب التي تريد إرجاعها في كل صفحة من النتائج. |
|
curl 'https://graph.facebook.com/v21.0
/102290129340398/message_templates?fields=name,status&limit=3' \
-H 'Authorization: Bearer EAAJB...'
{
"data": [
{
"name": "seasonal_promotion_text_only",
"status": "APPROVED",
"id": "564750795574598"
},
{
"name": "seasonal_promotion_video",
"status": "PENDING",
"id": "1252715608684590"
},
{
"name": "seasonal_promotion_image_header",
"status": "PENDING",
"id": "1372429296936443"
}
],
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MgZDZD"
},
"next": "https://graph.facebook.com/v21.0
/102290129340398/message_templates?fields=name%2Cstatus&limit=3&after=MgZDZD"
}
}
يمكنك إرجاع فقط القوالب بقيم الحقل المحددة من خلال تضمين الحقل والقيمة المرغوبة في الطلب. على سبيل المثال، قم بتضمين status=REJECTED
للحصول فقط على القوالب المرفوضة.
curl 'https://graph.facebook.com/v21.0
/104996122399160/message_templates?fields=name,status&status=REJECTED' \
-H 'Authorization: Bearer EAAJB...'
{ "data": [ { "name": "seasonal_promotion_text_only_v4", "status": "REJECTED", "id": "564750795574598" }, { "name": "discount_qualifier", "status": "REJECTED", "id": "163917509772674" }, { "name": "limited_time_offer_tuscan_getaway_2023", "status": "REJECTED", "id": "202389039167147" }, { "name": "2023_mar_promo_2", "status": "REJECTED", "id": "1116034925734553" }, { "name": "2023_mar_promo", "status": "REJECTED", "id": "952600926095321" } ] }
يلزم توفير مساحة اسم قالب الرسالة لإرسال الرسائل باستخدام قوالب الرسائل.
للحصول على مساحة الاسم لقالب ما، أرسل طلب GET
إلى نقطة النهاية /{whatsapp-business-account-ID}
وقم بتضمين الحقل message_template_namespace
.
curl -i -X GET "https://graph.facebook.com/v21.0
/{whatsapp-business-account-ID}
?fields=message_template_namespace
&access_token={system-user-access-token}"
في حالة نجاح العملية، يتم إرجاع كائن بلغة JSON يتضمن معرف حساب واتساب للأعمال ومساحة الاسم:
{ "id": "1972385232742141", "message_template_namespace": "12abcdefghijk_34lmnop" }
أرسل طلب POST إلى نقطة النهاية قالب رسالة واتساب لتعديل القالب. يمكنك أيضًا تعديل القالب يدويًا باستخدام لوحة مدير واتساب > أدوات الحساب > لوحة قوالب الرسائل.
APPROVED
أو REJECTED
أو PAUSED
.category
أو components
للقالب.category
في قالب تمت الموافقة عليه.POST /<WHATSAPP_MESSAGE_TEMPLATE_ID>
{ "category": "<CATEGORY>", "components": [<COMPONENTS>] }
العنصر النائب | الوصف | عينة من القيمة |
---|---|---|
String (سلسلة) | مطلوب إذا تم حذف خاصية المكونات. فئة القالب. |
|
Array (مصفوفة) | مطلوب إذا تم حذف خاصية الفئة. مصفوفة كائنات مكونات القالب. | راجع مثال على الطلب (تعديل المكونات) أدناه. |
مثال على طلب النص الأساسي للقالب الذي يحتوي على محتوى تسويق وأداة مساعدة بحيث يتضمن محتوى تسويقي فقط.
curl 'https://graph.facebook.com/v21.0
/564750795574598' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Spring Sale"
]
}
},
{
"type": "BODY",
"text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
"example": {
"body_text": [
[
"the end of April",
"25OFF",
"25%"
]
]
}
},
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubcribe from Promos"
},
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
]
}'
مثال على طلب تغيير فئة القالب من UTILITY
إلى MARKETING
.
curl 'https://graph.facebook.com/v21.0
/1252715608684590' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"category": "MARKETING"
}'
مثال على الطلب عند النجاح.
{ "success": true }
استخدم نقطة نهاية حساب واتساب للأعمال > قوالب الرسائل لحذف القالب حسب الاسم أو حسب المعرف.
PENDING_DELETION
وسنحاول تسليم الرسالة لمدة 30 يومًا. بعد هذه المدة ستتلقى الخطأ "البنية غير متوفرة" ولن يتلقى العميل الرسالة.يعمل حذف القالب حسب الاسم على حذف كل القوالب التي تطابق ذلك الاسم (أي أنه سيتم حذف القوالب ذات الاسم نفسه ولكن بلغات مختلفة).
DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?name=<NAME>
curl -X DELETE 'https://graph.facebook.com/v16.0/102290129340398/message_templates?name=order_confirmation' \ -H 'Authorization: Bearer EAAJB...'
{ "success": true }
لحذف القالب حسب المعرف، قم بتضمين معرف القالب مع الاسم في الطلب؛ لن يتم حذف إلا القالب بمعرف القالب المطابق.
DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates ?hsm_id=<HSM_ID>, &name=<NAME>
curl -X DELETE 'https://graph.facebook.com/v21.0
/102290129340398/message_templates?hsm_id=1407680676729941&name=order_confirmation' \
-H 'Authorization: Bearer EAAJB...'
{ "success": true }