إشعارات واتساب
واتساب هي قناة التواصل الأساسية — ليس البريد الإلكتروني، وليس الإشعارات الفورية. 98% من العملاء يتواصلون عبر واتساب. أتمتة الإشعارات هي الأولوية التجارية الأولى.
البنية
جميع الإشعارات تمر عبر قائمة مهام خلفية ويتم تسليمها عبر نمط مزود أساسي/احتياطي.
المسار الأساسي
المسار الاحتياطي
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. يتم استبدال المتغيرات باستخدام صيغة العناصر النائبة داخل النص العربي.
تتبع حالة التسليم
المسار الناجح
مسار الفشل
| الحالة | المعنى |
|---|---|
| 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 دقائق |
- حد أقصى 3 محاولات تسليم عبر WAHA مع تأخير تصاعدي أُسّي: 30 ثانية، دقيقتان، 10 دقائق
- بعد 3 محاولات فاشلة عبر WAHA، يتم التبديل تلقائياً إلى Twilio
- إذا فشل Twilio أيضاً، يتم تعليم الإشعار كـ failed وتسجيل الخطأ
الرسائل الواردة (مستقبلي)
incoming_messages لكن لا تُعالج تلقائياً. واتساب ثنائي الاتجاه (الردود التلقائية، تأكيد الحجز عبر الرد) هي ميزة ما بعد الإطلاق.
جدول incoming_messages يلتقط:
from_phone— رقم هاتف المرسلbody— محتوى نص الرسالةreceived_at— الطابع الزمني للاستلامis_processed— دائماًfalseعند الإطلاق
أحداث التحليلات
يتم إرسال أحداث 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 |