انتقل للمحتوى
علي هيثم·TECH·يردّ خلال أقل من ساعة
  • الرئيسيةابدأ من هنا
  • الأعمالدراسات حالة، مشاريع
  • الخدماتما الذي سأبنيه لك
  • المدونةمقالات، سلاسل
  • التدريبدورات، مختبرات، دورات
  • عنّيالمهندس وراء هذا الموقع
تسجيل الدخولابدأ مشروع
علي هيثم · TECH
  • الرئيسية↗
  • الأعمال↗
  • الخدمات↗
  • المدونة↗
  • التدريب↗
  • عنّي↗
تسجيل الدخولابدأ مشروع
متاح
علي هيثم·TECH

استوديو هندسي. دمشق، GMT+3.

aliyosef.online

الاستوديو

  • الأعمال
  • المدونة
  • التدريب
  • عنّي
  • تواصل معي

البوابة

  • تسجيل الدخول
  • فتح تذكرة دعم
  • متابعة مشروع
  • حسابي

مصادر

  • الوثائق
  • حالة الأنظمة
  • سجلّ التغييرات
  • حزمة العلامة
  • الخصوصية
  • الشروط

النشرة

ملاحظات تقنية وأخبار، أسبوعياً. بدون حشو.

مجاني. إلغاء الاشتراك متى ما حبيت.

تابعني على
© 2026 علي هيثم يوسف. جميع الحقوق محفوظة.مبنيّ يدويًا بـ React 19.آخر نشر · 2026-05-08كل الأنظمة تعمل
مشروع 082025مهندس Backend

منظومة جونادا للواتساب

بثّ واتساب وأتمتة قوالب لمشغّل تجارة إلكترونيّة إقليميّ. تكامل مباشر مع Meta Cloud API، 1.2 مليون رسالة شهريًّا بنسبة تسليم 99.9٪.

الدورمهندس Backend
السنة2025
التقنياتNode.js, Meta Cloud API, WhatsApp API
نظرة

عن المشروع.

جونادا منظومة بثّ وأتمتة قوالب على WhatsApp بنيتها لمشغّل تجارة إلكترونيّة إقليميّ كان يستنزف ميزانيّته على رسوم المنصّات لكلّ رسالة. يتحدّث النظام مباشرة مع Meta Cloud API، ويدير اعتماد القوالب، ويوجّه عمليّات البثّ الكبيرة عبر طابور يحترم حدود المعدّل لكلّ عميل. صمّمت وبنيت الخادم وطبقة الطابور وأدوات الإدارة. يمرّر الآن أكثر من مليون رسالة شهريًّا دون وسيط خارجيّ.

النتيجة

ما الذي تغيّر.

1.2M messages

رسالة شهريًّا

99.9%

نسبة التسليم

<300ms

زمن الـ API، الـ p95

التحدّي

ما الذي وجدناه.

مشغّل تجارة إلكترونيّة أراد بثّ تحديثات الطلبات والرسائل الترويجيّة إلى قاعدة عملائه عبر WhatsApp دون دفع رسوم لكلّ رسالة إلى الأبد.

المقاربة

ما الذي فعلناه.

تكامل مباشر مع Meta Cloud API، وطابور Node.js يحترم حدود المعدّل لكلّ عميل، وواجهة لإدارة القوالب تعكس مسار اعتماد قوالب WhatsApp ذاته كي يعرف المسؤول مسبقًا إن كان القالب سيُقبل.

النتيجة

ما الذي أصبح.

توجيه 1.2 مليون رسالة شهريًّا بنسبة تسليم 99.9٪ وبزمن إرسال وسطيّ تحت 300 مللي ثانية.

القطاعتجارة إلكترونيّة · CRM · أتمتة تسويق
النوعمنصّة بثّ WhatsApp + CMS دورة حياة القوالب
المدّة6 أشهر · إصدار 1؛ تشغيل مستمرّ
الفريقمنفرد · مهندس باك-إند + DevOps + مهندس واجهة إدارة
المُلكيّة

دوري الفعليّ في هذا المشروع.

منفرد · 100٪ باك-إند + طابور + واجهة إدارة + تكامل Meta API. لا طبقة SaaS (Twilio، MessageBird، 360dialog) تجلس بين المشغّل وMeta. علاقة مباشرة مع Meta Cloud API تعني الحفاظ على الهامش، تحكّمًا كاملاً بالقوالب، ولا رسوم وسيط لكلّ رسالة.

  • 01

    مهندس باك-إند

    Node.js 20 + Fastify. عميل Meta Cloud API مباشر، مستقبل webhook لإيصالات التسليم، مزامنة حالة القوالب.

  • 02

    مهندس طوابير + حدود معدّل

    BullMQ على Redis. سلّات حدود معدّل لكلّ عميل تحترم نظام مستويات WhatsApp (250/1k/10k/100k رسالة/يوم حسب درجة الجودة).

  • 03

    مهندس واجهة إدارة

    باني قوالب يعكس استمارة الموافقة في Meta، مجدول بثّ، مدير قوائم مستلمين، لوحة معدّل تسليم بتحديثات لحظيّة.

  • 04

    DevOps + مراقبة

    PM2، MongoDB Atlas، Sentry لتتبّع الأخطاء، لوحات Grafana لمعدّل التسليم + عمق الطابور.

في الإنتاج

الأرقام التي تهمّ.

  • +1.2Mرسالة شهريًّاحجم إنتاج ثابت؛ ذُرى خلال فعاليّات التخفيضات.
  • 99.9٪نسبة التسليمسُلّمت بتأكيد Meta (ليس مجرّد أُرسلت). الإرسالات الفاشلة تُعزَل + يُعاد المحاولة بعد التحليل.
  • <300msوسيط زمن الإرسالمن إضافة إلى الطابور إلى استلام Meta API، مقاس عند العامل.
  • 0$رسوم وسيط لكلّ رسالةتكامل Meta مباشر — تطبّق فقط أسعار محادثات Meta. لا زيادة SaaS.
  • ~85٪نسبة اعتماد القوالبتقدير — واجهة الإدارة تلتقط أشهر أسباب الرفض قبل الإرسال إلى Meta.
  • <2sمعالجة إيصال webhookwebhook Meta → تحديث قاعدة → تحديث لوحة.
لماذا كانت هذه المهمّة صعبة

ما الذي كان معطّلاً فعلاً.

مراسلة WhatsApp بحجم تفرض اختيارًا: تدفع لـTwilio/MessageBird/360dialog ~0.005-0.015 دولار للرسالة كرسوم وسيط فوق أسعار محادثات Meta — عند 1M رسالة/شهر تصبح 5000-15000 دولار شهريًّا تذهب لوسيط يضيف إدارة طوابير + لوحات لكنّه يحجز عملك رهينة لأسعاره. أو تتكامل مع Meta Cloud API مباشرة، ما يعني بناء الطابور، دورة حياة اعتماد القوالب، معالجة إيصال webhook التسليم، الالتزام بمستويات حدود المعدّل، واللوحات بنفسك. اختار المشغّل التكامل المباشر بعد حساب الأرقام بعد السنة الأولى.

التحدّيات الهندسيّة

المساحة الصعبة من المشروع.

  • 01نظام مستويات WhatsApp (250 → 1k → 10k → 100k → بلا حدّ رسالة/يوم حسب درجة الجودة) يتطلّب سلّة token لكلّ عميل تحترم المستوى الحاليّ + تخفض الإيقاع تلقائيًّا عند انخفاض درجة الجودة.
  • 02دورة حياة اعتماد القوالب: مسوّدة → مُرسَلة → قيد المراجعة → معتمَدة/مرفوضة. واجهة الإدارة تعكس أسباب رفض Meta بدقّة ليكرّر المشغّلون بسرعة دون إرسال مسوّدات سيّئة.
  • 03إيصالات التسليم تصل لاتزامنيًّا عبر webhooks لكلّ رسالة — عند 40 ألف رسالة/يوم هذا 40 ألف ضربة webhook. يجب معالجتها كلّها خلال ثانيتين لإبقاء اللوحة حيّة.
  • 04إدارة قوائم المستلمين: WhatsApp يتطلّب تأكيد opt-in لكلّ رقم؛ المنصّة يجب أن تتعقّب حالة الموافقة + تاريخ التسليم لكلّ رقم لتفادي الضرر الصامت لدرجة الجودة من الإرسال إلى أرقام غير مستجيبة.
  • 05شفافيّة التكلفة: المشغّلون يريدون تكلفة كلّ بثّ بعملتهم قبل الإرسال. أسعار Meta تتفاوت حسب بلد المستلم + فئة المحادثة (خدمة، تسويق، مصادقة، خدمة). الحاسبة يجب أن تطابق فواتير Meta ضمن ±2٪.
مشاكل صعبة محلولة

انتصارات هندسيّة تستحقّ التسمية.

01

سلّة حدود معدّل لكلّ عميل

سلّة token لكلّ حساب WhatsApp Business (WABA)، تعاد التعبئة بمعدّل المستوى الحاليّ. عند خفض المستوى (انخفاض درجة جودة)، تُعاد السلّة فورًا إلى الحدّ الجديد. لا فيضان طابور.

02

واجهة إدارة واعية باعتماد القوالب

واجهة الإدارة تشغّل مجموعة regex أسباب رفض Meta في الجانب العميل قبل الإرسال. يرى المشغّلون تحذيرات (مثل: «القوالب التسويقيّة لا يمكن أن تحتوي على أرقام هاتف في النصّ») ويعدّلون قبل حرق فتحة إرسال.

03

idempotency لـwebhook

Meta تعيد محاولة تسليم webhooks الفاشلة حتّى 24 ساعة. قد يصل نفس إيصال التسليم 5 مرّات أو أكثر. مفتاح idempotency على (waba_id + message_id + status) يمنع الحساب المضاعف.

04

محرّك توقّع التكلفة

مصفوفة أسعار Meta مسبقة التحميل، تُحدَّث يوميًّا. بحث حسب بلد المستلم، تصنيف فئة المحادثة، تحويل عملة وفق العملة الأساس للمشغّل. دقّة ±2٪ تحقّقت ضدّ فواتير Meta الشهريّة.

البنية المعماريّة

كيف يتشابك النظام.

01 — الحافّة

طبقة الحافّة

CloudflareCDN · WAFيحمي لوحة الإدارة؛ نقطة webhook مسموحة لـIPs Meta فقط
Nginxبروكسي عكسيّ · TLSيوجّه /api → Fastify، /webhooks/meta → عامل webhook مخصّص
02 — التطبيق

طبقة التطبيق (Node.js)

Admin APIFastify + JWTCRUD للمشغّل: قوالب، بثّ، مستلمون، لوحات
Meta clientSDK مخصّص · undiciتكامل Cloud API مباشر؛ إعادة محاولة مع backoff؛ throttling واعٍ بالمستوى
مستقبل webhookFastify · تحقّق توقيعتحقّق HMAC-SHA256 قبل أيّ كتابة في قاعدة
حاسبة التكلفةمصفوفة أسعار + Intl.NumberFormatتقدير ما قبل الإرسال دقيق ضمن ±2٪ من فاتورة Meta الفعليّة
03 — اللاتزامن

طبقة اللاتزامن + الطوابير

BullMQطابور بـRedisطابور لكلّ WABA؛ حدّ معدّل واعٍ بالمستوى؛ إعادة محاولة مع backoff
عامل البثّمستهلك BullMQ · 4 عمليّاتيسحب وظائف، يستدعي Meta، يسجّل ack، يطلق تحديث webhook
معالج webhookمستهلك BullMQ · idempotentإيصالات التسليم → تحديث MongoDB → دفع لحظيّ للوحة الإدارة
04 — البيانات

طبقة البيانات

MongoDB Atlasقوالب · بثّ · مستلمونتخزين بلا مخطّط يناسب تنوّع القوالب؛ فهارس على (waba_id, status)
Redis 7طابور · كاش · حدّ معدّلRedis واحد للطابور + عدّادات سلّة token + كاش جلسة
لماذا هذه التقنيّات

القرارات وراء كلّ اختيار.

Node.js + Fastify (باك-إند)

  • بيئة تشغيل event-driven هي التناسب الطبيعيّ لإدخال/إخراج webhook + طابور عالي الإنتاجيّة — 40 ألف إيصال/يوم بـCPU من خانة واحدة.
  • Fastify يتفوّق على Express بـ2-3 أضعاف في إنتاجيّة JSON عند الأحجام الصغيرة لـwebhooks WhatsApp.
  • async/await أصليّ + أنماط Promise.all تجعل التوزيع لكلّ بثّ تافهًا.

BullMQ + Redis (طابور)

  • أسماء طوابير لكلّ WABA تعطي عزلًا طبيعيًّا لكلّ عميل دون نسخ Redis منفصلة.
  • إعادة محاولة مع backoff مدمجة تتعامل مع 429s من Meta دون كود مخصّص.
  • أولويّات الوظائف تتيح للرسائل المعاملاتيّة العاجلة قطع الطابور أمام بثّ تسويقيّ كبير.

MongoDB (قوالب + بثّ)

  • القوالب ذات بنية شديدة التغيّر (أنواع وسائط الرأس، أعداد الأزرار، تجاوزات اللغة) — تخزين JSON أصليّ يتفادى 5+ هجرات لكلّ ميزة قالب.
  • خطوط aggregation تشغّل لوحة معدّل التسليم دون OLAP جانبيّ.

Meta Cloud API مباشر (لا SaaS وسيط)

  • عند 1M+ رسالة/شهر، رسوم الوسيط (5k-15k$ شهريًّا) تتجاوز تكلفة بناء الوسيط مرّة.
  • تحكّم كامل بدورة حياة القوالب، ترقيات المستوى، واسترداد درجة الجودة — لا طبقة SaaS تخفي الأذرع.
  • ملكيّة WABA مباشرة تبقى مع المشغّل؛ التحوّل إلى مزوّد آخر لاحقًا يعني تبديل الطابور + اللوحة، لا ترحيل حالة الحساب.
الدروس المستفادة

ما علّمنا إيّاه هذا البناء.

  • رسوم الوسيط لكلّ رسالة تتراكم. عند أيّ حجم ذي معنى، امتلاك الوسيط يردّ تكلفته خلال سنة.
  • نظام مستويات WhatsApp يكافئ السلوك الجيّد — لكنّه يعاقب الأخطاء بقسوة. استرداد درجة الجودة يستغرق أسابيع. ابنِ واجهة الإدارة لتفادي المسوّدات السيّئة قبل الشحن، لا للتفاعل مع الرفوض فقط.
  • idempotency لـwebhook ليس اختياريًّا. Meta ستعيد المحاولة. خطّط له من اليوم الأوّل.
صور

من داخل المشروع.

تابع القراءة
الحالة السابقةHAEIFINالحالة التاليةالقيس سنتر
لنبنِ معًا

تريد شيئًا مماثلًا؟

أتلقّى عددًا محدودًا من الالتزامات كلّ ربع. حدّثني عمّا تفكّر فيه.

لنبدأ الحديث→