سجّل روابط HTTPS خارجية تستدعيها Fynchat عند وقوع أحداث المنصّة، موقّعة بـ HMAC-SHA256، مع اختبار فوري وسجلّ تسليمات وتدوير للـ Secret.

الـ Webhooks تسمح لأنظمتك الخارجية بأن تُخطَر لحظياً عند وقوع أحداث داخل Fynchat. أنت تسجّل نقطة نهاية (endpoint) — وهي رابط HTTPS عندك — وتستدعيها المنصّة بطلب POST كلما وقع حدث اشتركت به (رسالة جديدة، طلب، حجز، تذكرة دعم... إلخ).
كل نقطة نهاية تتكوّن من ثلاثة أشياء:
عند الإنشاء يولّد النظام Signing Secret يظهر مرّة واحدة، وكل تسليم يُوقّع بـ HMAC-SHA256 حتى تتأكّد أنه فعلاً من Fynchat.
ولكل نقطة نهاية تقدر:
تجد الميزة في الإعدادات → التكاملات → 🔔 Webhooks على /settings/integrations?tab=webhooks. الرابط القديم
/settings/webhooksيحوّلك إليه تلقائياً. التبويب نفسه ظاهر في كل الباقات، لكن إنشاء النقاط وإدارتها يتطلّب باقة تتضمّن ميزة Webhooks (انظر القسم التالي).
ميزة Webhooks محكومة بميزة الباقة webhooks. التبويب يفتح في أي باقة، لكن إذا كانت باقتك لا تتضمّن الميزة تشوف لوحة مقفلة 🔒 مع زر ترقية (/upgrade)، ويكون زر الإنشاء معطّلاً.
أعلى القائمة يظهر عدّاد المستخدَم/الحد الأقصى (مثلاً 2/5) للباقات المحدودة:
| الباقة | الحد الأقصى للنقاط |
|---|---|
| Business | حتى 5 نقاط |
| Enterprise | غير محدود (بدون عرض حد) |
اضغط زر الإنشاء ليُفتح النموذج، واملأ:
| الحقل | مطلوب؟ | ملاحظات |
|---|---|---|
| الاسم | اختياري | نص حر حتى 120 حرفاً؛ عند تركه فارغاً يظهر اسم بديل في القائمة |
| الرابط (URL) | مطلوب | رابط صالح حتى 500 حرف، ولازم يكون عنوان HTTPS عاماً (قاعدة PublicHttpsUrl). مثال: https://yourdomain.com/wa-webhook |
| الأحداث | مطلوب (واحد على الأقل) | اختر حدثاً واحداً أو أكثر من مربّعات الأحداث المجمّعة؛ ويُدقَّق كل حدث مختار مقابل قائمة الأحداث الثابتة عند الحفظ |
بعد الحفظ تُنشأ النقطة مفعّلة مباشرة، وتظهر لك رسالة: «تم إنشاء Webhook. احفظ الـ Secret الآن — لن يظهر مرّة أخرى.».
الأحداث مُجمّعة في عائلات، وتُدقَّق مقابل قائمة ثابتة داخل النظام. اشترك بحدث واحد أو أكثر من القائمة:
| العائلة | المجال |
|---|---|
message.* |
الرسائل (مثل message.received، message.sent) |
contact.* |
جهات الاتصال |
campaign.* |
الحملات |
template.* |
القوالب |
booking.* |
الحجوزات والمواعيد |
order.* / product.* |
المتجر (الطلبات والمنتجات) |
property.* / viewing.* / real_estate.* |
العقارات والمعاينات |
vehicle.* / test_drive.* / trade_in.* / car_dealership.* |
معارض السيارات |
ticket.* / request.* |
تذاكر وطلبات الدعم |
ai.* |
الذكاء الاصطناعي |
subscription.* / trial.* |
الاشتراك والتجربة (مثل trial.ending_soon) |
بعد الإنشاء (أو بعد التدوير) يظهر الـ Secret مرّة واحدة فقط في بانر مع زر نسخ وتحذير بأنه لن يظهر ثانيةً — احفظه فوراً. صيغته whsec_ متبوعة بـ 48 حرفاً عشوائياً، وهو مخزّن كحقل مخفي لا يظهر أبداً في القوائم.
كل تسليم (وكذلك نبضة الاختبار) يُوقّع بـ HMAC-SHA256 لجسم الطلب باستخدام الـ Secret، ويحمل هذه الترويسات:
| الترويسة | القيمة |
|---|---|
X-Fyntra-Event |
نوع الحدث (مثلاً webhook.test) |
X-Fyntra-Signature |
sha256= متبوعة بتوقيع HMAC-SHA256 لجسم الطلب باستخدام الـ Secret |
X-Fyntra-Delivery-Id |
معرّف فريد لكل تسليم (نبضات الاختبار تبدأ بـ test_) |
تحقّق من التوقيع قبل أي معالجة. مثال بـ PHP:
$body = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_FYNTRA_SIGNATURE']; // "sha256=..."
$expected = 'sha256=' . hash_hmac('sha256', $body, $YOUR_SIGNING_SECRET);
if (!hash_equals($expected, $sig)) { http_response_code(401); exit; }
زر تدوير الـ Secret يطلب تأكيداً، ثم يولّد Secret جديداً ويعرضه مرّة واحدة في بانر. تُسجَّل العملية في سجلّ تدقيق الحساب كحدث webhook.secret_rotated. بعد التدوير حدّث الـ Secret في نظامك فوراً.
زر Test يرسل طلب POST متزامناً إلى رابطك يحوي {"event":"webhook.test", ...} (نصّه: «هذا اختبار للاتصال من فينترالينك»)، بمهلة 15 ثانية. تظهر النتيجة فوراً في الواجهة:
الطلب موقّع بنفس الترويسات أعلاه، فهو وسيلة عملية للتأكّد أن نقطتك تستقبل وتتحقّق من التوقيع بشكل صحيح قبل الاعتماد عليها.
خلافاً للاختبار المتزامن، تُرسَل أحداث المنصّة الحقيقية عبر مهمّة في الخلفية (queue). زر السجلّات (Logs) يفتح نافذة تعرض محاولات التسليم، 30 لكل صفحة والأحدث أولاً:
| العمود | المعنى |
|---|---|
event_type |
نوع الحدث |
status |
الحالة: success / pending / failed |
response_status |
رمز استجابة HTTP من نقطتك |
created_at |
وقت المحاولة |
أي تسليم حالته ليست success يظهر بجانبه زر إعادة المحاولة (Retry)، الذي يعيد إرسال نفس الحدث بمعرّفه ونوعه وحمولته الأصلية.
بطاقة كل نقطة تعرض حالتها وإحصاءاتها:
نصيحة: اجعل نقطتك تُرجِع رمز 2xx بعد الاستلام؛ أي رد خارج نطاق 2xx يُحتسب تسليماً فاشلاً.
X-Fyntra-Signature قبل معالجة أي طلب.نستخدم ملفات ضرورية لتشغيل الموقع. وبإذنك نقيس الاستخدام وأداء الإعلانات كذلك. تقدر تغيّر اختيارك في أي وقت. سياسة الخصوصية