Webhooks
Webhooks هي الطريقة التي يُخطر بها مزودو القنوات PulseHub عند حدوث شيء ما — عميل يرسل رسالة، تغيّر حالة التسليم، إلخ.
نمط عنوان URL الخاص بـ Webhook
https://yourdomain.com/webhooks/{channel_type}/{channel_id}
التحقق من Webhook (طلبات GET)
بعض المزودين يتحققون من عنوان URL الخاص بـ webhook بتحدٍ قبل إرسال الرسائل الحقيقية:
WhatsApp / Facebook / Instagram
يتحقق PulseHub من hub.verify_token ويعيد hub.challenge.
Telegram
لا يوجد تحقق GET — ضبط webhook عبر Bot API كافٍ.
Viber
يرسل حدث conversation_started عند الفتح الأول. يُعيد PulseHub {"status": 0}.
التحقق من التوقيع
| المزود | الرأس | السر |
|---|---|---|
| WhatsApp/Facebook/Instagram | X-Hub-Signature-256 | App Secret |
| Viber | X-Viber-Content-Signature | Auth Token |
| Twilio | — | أمان قائم على URL |
| Telegram | — | أمان قائم على UUID في URL |
جميع مقارنات HMAC تستخدم hash_equals() (وقت ثابت).
تسجيل الأحداث
يتم تسجيل كل حمولة webhook في جدول webhook_events بحالة status = pending. بعد المعالجة: processed. عند الفشل: failed.
إعادة محاولة Webhooks الفاشلة
تقوم مهمة cron بإعادة محاولة الأحداث الفاشلة حتى 5 مرات خلال 24 ساعة.