هذه النقاط الأربع تفتح إضافة مرسل واتساب عبر الواجهة البرمجية: قوالب رسائل الطلبات التي اعتمدتها المنصة، ورصيد واتساب الخاص بالمتجر، وسجل الرسائل المرسلة للزبائن، ونداء يرسل قالباً واحداً لزبون طلب واحد. الرسالة المرسلة عبر الواجهة البرمجية تخضع لقواعد الرسائل التلقائية نفسها: تُخصم رسالة واحدة من الرصيد عند وضعها في الطابور، وتعود إلى الرصيد إذا لم يفوترها واتساب، سواء رُفضت أو لم تصل أبداً أو وصلت دون فوترة. والرسالة التي لا تُرسل لا يُخصم منها شيء.
لا يمكن إرسال نص حرّ. كل رسالة هي أحد القوالب الستة المذكورة أسفله، تُملأ من بيانات الطلب (الاسم الأول للزبون، رقم الطلب، اسم المتجر، شركة التوصيل، مكتب الاستلام، المبلغ)، بالعربية أو الفرنسية، مع زر "تتبع طلبي".
قبل أن تبدأ
يجب أن تكون إضافة مرسل واتساب مفعّلة في المتجر (صفحة الإضافات في لوحة التحكم). نقاط القراءة الثلاث تعمل بدونها، أما الإرسال فيُرجع
403 addon_not_active.شحن الرصيد يتم من صفحة الإضافة في لوحة التحكم (
/dashboard/whatsapp-sender، زر شحن الرصيد). الواجهة البرمجية تقرأ الرصيد ولا تشحنه.الرسائل تُرسل إلى الأرقام الجزائرية للهاتف النقال فقط (05 أو 06 أو 07). أي رقم آخر يُتجاوز بـ
invalid_numberدون أي خصم.يحتاج المفتاح صلاحيات واتساب. المفاتيح المُنشأة من لوحة التحكم (الإعدادات ← واجهة API،
/dashboard/api) تحصل على الاثنتين. الصلاحيات تُجمَّد لحظة إنشاء المفتاح، فالمفتاح الذي أُنشئ قبل الإصدار v1.6 لا يملكهما: أنشئ مفتاحاً جديداً من لوحة التحكم لاستعمال هذه النقاط. والمفتاح المُنشأ عبرPOST /v1/keysلا يحصل إلا على الصلاحيات التي يملكها المفتاح الذي أنشأه.
النطاق | الوصف |
| الاطلاع على قوالب رسائل واتساب ورصيدك وسجل الرسائل المرسلة |
| إرسال رسائل واتساب لزبائنك بخصوص طلباتهم (تُخصم كل رسالة من رصيد واتساب) |
GET /v1/whatsapp/templates
قائمة القوالب: النص العربي والفرنسي، وقيم مثال لكل خانة، وحالة الاعتماد لكل لغة.
المصادقة: مفتاح منصة بصلاحية whatsapp:read.
الحالة هي آخر ما قرأته المنصة من واتساب. تُحدَّث مرة كل 10 دقائق على الأكثر ما دامت الرسائل تُرسل، وUNKNOWN تعني أنها لم تُقرأ بعد. هذا النداء لا يتصل بواتساب أبداً. لا تُرسل إلا القوالب المعتمدة APPROVED: الإرسال بلغة قالبها غير معتمد يُتجاوز بـ template_not_approved دون أي خصم.
الطلب
curl 'https://api.dzbuild.app/v1/whatsapp/templates' \ -H "Authorization: Bearer $DZ_KEY"
الاستجابة 200
يظهر هنا عنصر واحد من الستة.
{
"data": {
"items": [
{
"key": "shipped_home",
"name": "dz_order_shipped_home",
"toggle": "shipped",
"languages": {
"ar": {
"body": "أهلاً {{1}}، طلبك رقم {{2}} من {{3}} في الطريق مع {{4}}.\nسيصلك خلال {{5}}. سيتصل بك عامل التوصيل قبل الوصول، يرجى إبقاء هاتفك متاحاً وتجهيز المبلغ: {{6}} دج.\nاضغط على الزر لتتبع طلبك.",
"example": ["أحمد", "1024", "متجري", "Yalidine", "يوم إلى 3 أيام", "3500"],
"status": "APPROVED"
},
"fr": {
"body": "Bonjour {{1}}, votre commande n° {{2}} chez {{3}} est en route avec {{4}}.\nLivraison prévue sous {{5}}. Le livreur vous appellera avant d'arriver : restez joignable et préparez le montant de {{6}} DA.\nAppuyez sur le bouton pour suivre votre commande.",
"example": ["Ahmed", "1024", "Ma Boutique", "Yalidine", "1 à 3 jours", "3500"],
"status": "APPROVED"
}
}
}
]
}
}
القوالب الستة
|
| ما يقرؤه الزبون |
|
| وصل طلبه وسيتصل به المتجر لتأكيده. |
|
| تم تأكيد طلبه وهو قيد التجهيز، مع المبلغ المطلوب. |
|
| طلبه في الطريق إلى عنوانه، مع مدة التوصيل المتوقعة المضبوطة في الإضافة. |
|
| طلبه في الطريق إلى مكتب استلام تذكره الرسالة. |
|
| لم يتمكن الموصل من الوصول إليه اليوم وسيعاود المحاولة غداً. |
|
| الطرد ينتظره في مكتب الاستلام. |
toggle هو مفتاح الرسالة التلقائية في إعدادات الإضافة الذي يتبعه القالب. يتحكم في الرسائل التلقائية فقط، والإرسال عبر الواجهة البرمجية لا يأخذه بعين الاعتبار.
GET /v1/whatsapp/balance
الرصيد وحالة الإضافة وعدّادات الرسائل التي تظهر في صفحة الإضافة.
المصادقة: مفتاح منصة بصلاحية whatsapp:read.
الطلب
curl 'https://api.dzbuild.app/v1/whatsapp/balance' \ -H "Authorization: Bearer $DZ_KEY"
الاستجابة 200
{
"data": {
"balance": 412,
"low_balance": false,
"addon_active": true,
"stats": {
"sent": 12,
"delivered": 230,
"read": 158,
"failed": 4,
"free": 9,
"used_month": 96
}
}
}
الحقل | المعنى |
| عدد الرسائل المتبقية في الرصيد. المتجر الذي لم يشحن أبداً رصيده |
|
|
| هل إضافة مرسل واتساب مفعّلة في المتجر. |
| رسائل آخر 30 يوماً حسب حالتها الحالية. |
| رسائل آخر 30 يوماً التي وصلت إلى الزبون ولم يفوترها واتساب. أُعيدت إلى رصيدك. |
| الرسائل المخصومة من الرصيد منذ أول الشهر دون أن تُعاد إليه، أي التي فوترها واتساب والتي لم يبلّغ واتساب عن نتيجتها بعد. |
GET /v1/whatsapp/messages
رسائل المتجر من الأحدث إلى الأقدم: الرسائل التلقائية (source قيمته auto) والمرسلة عبر الواجهة البرمجية (source قيمته api). رقم هاتف الزبون لا يُرجَع أبداً.
المصادقة: مفتاح منصة بصلاحية whatsapp:read.
معاملات الاستعلام
المعامل | النوع | الافتراضي | ملاحظات |
| أرقام | لا شيء | رسائل هذا الطلب فقط. أي قيمة ليست أرقاماً فقط تُرجع |
| int | 50 | من 1 إلى 200. |
| string | لا شيء | قيمة |
الطلب
curl 'https://api.dzbuild.app/v1/whatsapp/messages?order_id=6894' \ -H "Authorization: Bearer $DZ_KEY"
الاستجابة 200
{
"data": {
"items": [
{
"id": 4181,
"order_id": 6894,
"event": "shipped_home",
"source": "api",
"status": "read",
"language": "fr",
"template_name": "dz_order_shipped_home",
"error_title": null,
"refunded": false,
"billing": "charged",
"created_at": "2026-09-26 10:14:03"
},
{
"id": 4180,
"order_id": 6894,
"event": "confirmed",
"source": "auto",
"status": "delivered",
"language": "ar",
"template_name": "dz_order_confirmed",
"error_title": null,
"refunded": true,
"billing": "free",
"created_at": "2026-09-25 18:02:41"
}
],
"next_cursor": null,
"has_more": false
}
}
الحقل | المعنى |
| في الرسالة التلقائية: حدث الطلب الذي أطلقها ( |
|
|
| انظر الجدول أدناه. |
|
|
| اسم القالب المسجّل لدى واتساب. |
| سبب تجاوز الرسالة أو فشلها، وإلا فـ |
|
|
|
|
| بصيغة |
| المعنى |
| مدفوعة وتنتظر (قيد الإرسال). ترسلها المنصة خلال دقيقة تقريباً. |
| تُسلَّم الآن إلى واتساب (قيد الإرسال). |
| قبلها واتساب (أُرسلت). |
| وصلت إلى هاتف الزبون (وصلت). |
| فتحها الزبون (قُرئت). |
| لم يتمكن واتساب من إيصالها (فشلت). إذا فشل الإرسال إلى واتساب نفسه، يعود الرصيد خلال دقائق. وإذا أبلغ واتساب عن الفشل، تنتظر المنصة 24 ساعة قبل إعادة الرصيد، لأن واتساب قد يبلّغ بعدها أنها وصلت إلى جهاز آخر للزبون، فتتحول حالتها إلى |
| لم تُرسل ولم يُخصم منها شيء (لم تُرسل). |
الرسالة المتجاوزة تحمل أحد هذه الأسباب في error_title:
| المعنى |
| رقم غير صالح: الهاتف ليس رقماً جزائرياً للنقال. |
| رقم بلا واتساب. |
| القالب بانتظار الموافقة في تلك اللغة. |
| بيانات ناقصة: الطلب ينقصه معطى يحتاجه القالب. |
POST /v1/orders/{id}/whatsapp
يضع قالباً واحداً في طابور الإرسال لزبون طلب واحد ويخصم رسالة واحدة من الرصيد. ترسلها المنصة خلال دقيقة تقريباً.
المصادقة: مفتاح منصة بصلاحية whatsapp:send. يتطلب Idempotency-Key.
الجسم
الحقل | النوع | إلزامي | ملاحظات |
| string | نعم | قيمة |
|
| لا | الافتراضي هو لغة الرسائل المختارة في إعدادات الإضافة، أو لغة المتجر إن لم تُختر لغة. |
ما يفعله النداء
يتحقق من أن الإضافة مفعّلة وأن الطلب تابع للمتجر. طلب متجر آخر يُرجع
404مثل طلب غير موجود.لا يأخذ مفاتيح الرسائل التلقائية في الإضافة بعين الاعتبار: يمكنك إرسال قالب أوقفه التاجر للرسائل التلقائية.
كل قالب يُرسل مرة واحدة لكل طلب عبر الواجهة البرمجية. النداء الثاني يُرجع
409 already_sentمعidوstatusللرسالة السابقة. الاستثناء الوحيد محاولة سابقة تم تجاوزها، مثلاً لأن الرقم كان غير صالح ثم صُحّح في الطلب: عندها يعيد النداء المحاولة.يتحقق من الرقم واعتماد القالب وبيانات الطلب. أي مشكلة تُرجع
422وسببها هو رمز الخطأ، وتُسجَّل رسالة متجاوزة دون أي خصم.يخصم رسالة واحدة من الرصيد. الرصيد الفارغ يُرجع
402 no_creditولا يُسجَّل شيء.يُرجع
202. تابع الرسالة بـGET /v1/whatsapp/messages?order_id=مع رقم الطلب. الرسالة التي يرفضها واتساب تصبحfailedوتعود إلى الرصيد.
رسائل الواجهة البرمجية تُحسب منفصلة عن الرسائل التلقائية. إرسال shipped_home عبر الواجهة البرمجية لا يمنع رسالة "الطلب في الطريق" التلقائية للطلب نفسه، والرسالة التلقائية لا تمنع الإرسال عبر الواجهة البرمجية. وكل واحدة مدفوعة.
الطلب
curl -X POST 'https://api.dzbuild.app/v1/orders/6894/whatsapp' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: wa-6894-shipped-1" \
-d '{"template": "shipped", "language": "fr"}'
الاستجابة 202
قيمة template هي المفتاح الذي وُضع في الطابور، بعد تحويل shipped إلى القالب المناسب.
{
"data": {
"message_id": 4181,
"status": "queued",
"template": "shipped_home",
"language": "fr"
}
}
الأخطاء
HTTP | الرمز | السبب |
400 |
| رقم الطلب ليس أرقاماً فقط، أو الجسم ليس JSON صالحاً، أو |
402 |
| رصيد واتساب فارغ. لم يُسجَّل شيء. |
403 |
|
|
403 |
| إضافة مرسل واتساب غير مفعّلة في المتجر. |
404 |
| لا يوجد طلب بهذا الرقم في المتجر. |
409 |
| هذا القالب أُرسل من قبل لهذا الطلب عبر الواجهة البرمجية. |
422 |
|
|
422 |
|
|
422 |
| هاتف الطلب ليس رقماً جزائرياً للنقال. |
422 |
| هاتف الطلب بلا واتساب. |
422 |
| القالب غير معتمد بعد في تلك اللغة. |
422 |
| الطلب ينقصه معطى يحتاجه القالب. |
422 |
| استُعمل |
500 |
| تعذر وضع الرسالة في الطابور. أعد المحاولة بالمفتاح نفسه. |
هكذا يبدو 409 already_sent.
{
"error": {
"code": "already_sent",
"message": "This template was already sent for this order",
"id": 4181,
"status": "delivered"
}
}
إعادة المحاولة وIdempotency-Key
أول استجابة لكل مفتاح تُحفظ 24 ساعة. إعادة المحاولة بالمفتاح نفسه والجسم نفسه تُرجع تلك الاستجابة مع Idempotency-Replay: 1، حتى لو كانت 402 أو 403 أو 422. لذلك بعد شحن الرصيد أو تفعيل الإضافة أو تصحيح الطلب، أعد المحاولة بـ Idempotency-Key جديد: المفتاح القديم يبقى يُرجع الخطأ القديم. والـ 202 المُعادة تعني أنه لم تُوضع رسالة ثانية في الطابور.
المفتاح نفسه مع جسم مختلف أو لطلب آخر يُرجع 422 idempotency_key_reuse. استجابات 5xx و429 لا تُحفظ أبداً، فأعد المحاولة بالمفتاح نفسه. وإن كانت الرسالة قد وُضعت في الطابور فعلاً قبل الخطأ، تُرجع إعادة المحاولة 409 already_sent مع id الرسالة، ولا يُخصم شيء مرتين. انظر Idempotency.
حدود معروفة
نص مدة التوصيل. القالب
shipped_homeيحمل مدة التوصيل المتوقعة كما كتبها التاجر في إعدادات الإضافة. إذا كان هذا الحقل فارغاً، يحمل المدة الافتراضية للإضافة مكتوبة بلغة الرسائل المختارة في إعداداتها (أو لغة المتجر إن لم تُختر لغة). رسالة فرنسية من متجر مدته بالعربية، مكتوبة أو افتراضية، تُظهر ذلك النص العربي وسط الرسالة الفرنسية. المدة المكتوبة بالأرقام فقط، مثل24-72h، تُقرأ بالطريقة نفسها في اللغتين.بطء الإرسال بعد فحص الاعتماد. عندما يمضي أكثر من 10 دقائق على آخر قراءة لحالة اعتماد قالب، يعيد الإرسال قراءتها من واتساب قبل وضع الرسالة في الطابور. يحدث ذلك مرة واحدة على الأكثر لكل قالب ولغة كل 10 دقائق، وقد يؤخر
POSTحتى 15 ثانية، لذا اضبط مهلة عميل HTTP لديك على 20 ثانية على الأقل.