البنية

جميع الإشعارات تمر عبر قائمة مهام خلفية ويتم تسليمها عبر نمط مزود أساسي/احتياطي.

المسار الأساسي

التطبيق Background Job Queue WAHA (أساسي) واتساب العميل

المسار الاحتياطي

فشل WAHA Twilio (احتياطي) واتساب العميل

WAHA (أساسي)

واجهة HTTP ذاتية الاستضافة لواتساب. بدون تكلفة لكل رسالة. تعمل كحاوية Docker بجانب التطبيق. جميع الإشعارات تحاول عبر WAHA أولاً.

Twilio (احتياطي)

احتياطي تلقائي عند فشل تسليم WAHA بعد جميع محاولات إعادة المحاولة. تكلفة لكل رسالة، لكنه يضمن التسليم عندما تكون القناة الأساسية معطلة.

قائمة المهام الخلفية (Hangfire أو IHostedService)

لا ترسل الإشعارات بشكل متزامن أبداً. كل إشعار يُضاف كمهمة خلفية عبر Hangfire أو IHostedService في .NET. هذا يفصل إنشاء الحجز عن تسليم الرسائل ويُمكّن من إعادة المحاولة.

Webhooks حالة التسليم

يرسل WAHA تحديثات حالة التسليم عبر webhooks. يتتبع النظام كل رسالة من حالة pending حتى delivered أو failed.

4 قوالب أساسية

جميع القوالب مكتوبة بـالعربية. يستخدم كل قالب استبدال المتغيرات لتفاصيل العميل والحجز.

القالب المحفّز التوقيت
booking_created عند إنشاء الحجز فوراً
booking_confirmed عند تغيير الحالة إلى مؤكد عند التأكيد
24h_reminder قبل 24 ساعة من الجلسة مهمة مجدولة
booking_cancelled عند إلغاء الحجز فوراً

متغيرات القوالب

كل قالب يمكنه الوصول إلى المتغيرات التالية، التي يتم حقنها وقت الإرسال:

المتغير الوصف مثال
customer_name اسم العميل المعروض أحمد
field_name اسم الملعب المحجوز (بالعربية) ملعب 1
location_name اسم الموقع (بالعربية) ملاعب النجمة
date تاريخ الحجز 2024-03-15
time وقت بدء الجلسة 18:00
price سعر الحجز بالريال السعودي 150 SAR
جميع القوالب بالعربية. يتم تخزين محتوى القوالب في جدول notification_templates مع أعمدة name_ar و body_ar. يتم استبدال المتغيرات باستخدام صيغة العناصر النائبة داخل النص العربي.

تتبع حالة التسليم

المسار الناجح

معلق مرسل مُسلّم

مسار الفشل

معلق مرسل فشل إعادة محاولة حتى 3 محاولات عبر WAHA، ثم الانتقال إلى Twilio
الحالة المعنى
pending في قائمة الانتظار، لم يُرسل بعد
sent أُرسل إلى المزود (WAHA أو Twilio)
delivered تأكيد التسليم إلى المستلم
failed فشل التسليم بعد جميع المحاولات

نقاط نهاية الـ Webhooks

نقطتا نهاية webhook تستقبلان الاستجابات من WAHA:

الطريقة نقطة النهاية الغرض
POST /webhooks/whatsapp/messages الرسائل الواردة من العملاء عبر WAHA
POST /webhooks/whatsapp/status تحديثات حالة التسليم من WAHA

منطق إعادة المحاولة

المحاولة المزود التأخير
المحاولة الأولى WAHA فوراً
المحاولة الثانية WAHA 30 ثانية
المحاولة الثالثة WAHA دقيقتان
المحاولة الرابعة (احتياطي) Twilio 10 دقائق
لا تُسقط إشعاراً بصمت أبداً. يجب تسجيل كل فشل مع رمز الخطأ والمزود والقالب. الإشعارات الفاشلة تظهر في تحليلات لوحة الإدارة للمتابعة اليدوية.

الرسائل الواردة (مستقبلي)

ميزة ما بعد الإطلاق: في إصدار v3، يتم تخزين الرسائل الواردة في جدول incoming_messages لكن لا تُعالج تلقائياً. واتساب ثنائي الاتجاه (الردود التلقائية، تأكيد الحجز عبر الرد) هي ميزة ما بعد الإطلاق.

جدول incoming_messages يلتقط:

أحداث التحليلات

يتم إرسال أحداث PostHog التالية لتتبع الإشعارات:

الحدث الخصائص
notification_sent template, channel, provider
notification_delivered template, delivery_time_ms
notification_failed template, error_code, provider
customer_message_received is_reply, contains_booking_ref