webhook المنصة كيف تعالج طلبات HTTP الواردة من مزوّدك. هذا هو جوهر التكامل القائم على الأحداث.
عنوان الويب هوك الخاص بك: https://{saas-api-url}/miniapps/{ns}/webhooks
هذا العنوان يُولَّد تلقائياً ومتاح كـ {{webhookUrl}} في طلبات التسجيل.
ليست ويب هوك المستأجر — هذه ويب هوك مزوّد واردة (مثل Salla → كرزون). لأحداث مساحة العمل الصادرة إلى خادمك، راجع ويب هوك المستأجر.
استخراج الحدث
يخبر المنصة أين تجد اسم الحدث في طلب الويب هوك الوارد. استخراج بسيط (حقل واحد):- ترسل Salla
{ "event": "order.created", "data": {...} }←source: 'body', path: '$.event' - خدمة ترسل اسم الحدث في ترويسة ←
source: 'header', path: 'X-Event-Type'
compositeStrategy لدمجها:
إلغاء تكرار المعاملات
يمنع معالجة الويب هوك نفسه مرتين (مثلاً أثناء إعادة المحاولة).'$.data.id'— معرّف طلب/سلة Salla'$.delivery'— ترويسة delivery في GitHub'$.event_id'— حقل معرّف حدث عام
التحقق (توقيعات HMAC)
تحقق من أن الويب هوك الواردة تأتي فعلاً من مزوّدك باستخدام التحقق بتوقيع HMAC.encoding اختياري لأنواع HMAC: 'hex' (الافتراضي) أو 'base64' (WooCommerce X-WC-Webhook-Signature).
كيف يُحلّ السر (secretKey):
حقل secretKey هو اسم مفتاح، وليس قيمة السر نفسها. تحلّ المنصة السر الفعلي ببحث من مصدرين:
- بيانات اعتماد لكل مستأجر — تتحقق أولاً من
installedMiniApps.credentials[secretKey]. استخدم هذا عندما يُصدر المزوّد سراً فريداً لكل متجر/مستأجر متصل (مثلاً تسجيل ويب هوك يعيد مفتاح توقيع لكل متجر). - إعداد التطبيق العام — الرجوع إلى
miniApp.auth.config[secretKey]إن لم يُوجد في بيانات اعتماد المستأجر. استخدم هذا عندما يستخدم المزوّد سراً عاماً واحداً مشتركاً بين جميع المستأجرين (مثل Salla، حيث يُضبط سر الويب هوك مرة واحدة في لوحة الشريك).
كيف يعمل تحقق HMAC:
- تقرأ المنصة التوقيع من
headerName - تزيل البادئة
sha256=أوsha1=إن وُجدت - تحلّ السر عبر بحث المصدرين الموضّح أعلاه
- تحسب HMAC لجسم الطلب الخام باستخدام السر المحلول
- تقارن بمقارنة آمنة زمنياً لمنع هجمات التوقيت
- ترفض بـ
401إن لم يتطابقا
استجابة التحدي / المصافحة
بعض المزوّدين (مثل Slack) يتطلبون مصافحة تحدٍّ–استجابة عند تسجيل الويب هوك.- يرسل المزوّد POST مع
{ "type": "url_verification", "challenge": "abc123" } - تتحقق المنصة:
body.type === 'url_verification'← نعم، هذا تحدٍّ - تستخرج المنصة رمز التحدي من
$.challenge←"abc123" - ترد المنصة بـ
{ "challenge": "abc123" } - يعتبر المزوّد عنوان الويب هوك موثَّقاً
responseField، يُرجع رمز التحدي كجسم استجابة خام.
استخراج العميل
لميني أب التي تستقبل بيانات عملاء في الويب هوك (منصات التجارة الإلكترونية، أنظمة CRM)، اضبط إنشاء/مطابقة العملاء تلقائياً.
كيف تعمل: عند وصول ويب هوك، تقوم المنصة بـ:
- استخراج بيانات العميل من
basePath(أو مسار التجاوز للحدث المحدد) - تعيين أسماء حقول المزوّد إلى أسماء الحقول الداخلية
- استدعاء
getOrCreateCustomer()الذي يجد أو ينشئ سجل العميل - ربط العميل بالحدث الوارد لسياق الأتمتة
إعداد الاستجابة
عرّف ما ترسله المنصة إلى مزوّدك بعد استلام الويب هوك.ترسل المنصة الاستجابة فوراً عند استلام الويب هوك، قبل بدء المعالجة غير المتزامنة. هذا يمنع مهلات المزوّد. استخدم
202 إذا كان مزوّدك يتوقع استجابات بأسلوب الإقرار.