Support

ويب هوكس الواردة

استقبل الأحداث من المنصات الخارجية ومنح البذور لعملائك تلقائيًا. تتيح لك الويب هوكس الواردة ربط أي أداة طرف ثالث - تطبيقات الاختبارات، النماذج، منصات المراجعة،

📥 الويب هوكس الواردة

استقبل الأحداث من المنصات الخارجية ومنح البذور لعملائك تلقائيًا. تتيح لك الويب هوكس الواردة ربط أي أداة خارجية — تطبيقات الاختبارات، النماذج، منصات المراجعة، Zapier، Make، والمزيد — ببرنامج ولاء LoyaltyTree الخاص بك.


كيف يعمل

يستخدم نظام الويب هوكس الواردة نموذج المصادر والرموز:

  1. إنشاء مصدر — يمثل المصدر منصة أو أداة خارجية (مثل "Typeform"، "Zapier"، "تطبيق الاختبار الخاص بي"). يحصل كل مصدر على عنوان URL فريد للويب هوك ومفتاح سري للأمان.
  2. إضافة رموز إلى المصدر — يحدد كل رمز إجراءً معينًا يمنح البذور (مثل "quiz_completed"، "form_submitted"، "birthday_claimed"). يمكنك تحديد عدد البذور التي يمنحها كل رمز، مع حدود اختيارية.
  3. إرسال طلبات POST — ترسل منصتك الخارجية طلب POST إلى عنوان URL للويب هوك مع الرمز ومعلومات العميل. يجد LoyaltyTree العميل أو ينشئه ويمنح البذور تلقائيًا.

المنصة الخارجيةPOST إلى عنوان URL للويب هوكLoyaltyTree يتحقق ويمنح البذورتحديث رصيد العميل


البدء

الخطوة 1: إنشاء مصدر ويب هوك

انتقل إلى المتاجر → [متجرك] → التكاملات → الويب هوكس الواردة. انقر على + إضافة مصدر وأعطه اسمًا يصف المنصة الخارجية (مثل "اختبارات Typeform" أو "أتمتة Zapier").

عند إنشاء المصدر، ستتلقى:

  • عنوان URL للويب هوك — النقطة التي سترسل إليها منصتك الخارجية الطلبات
  • سر الويب هوك — مفتاح سري لتوقيع الطلبات (موصى به للأمان)

الخطوة 2: إضافة الرموز

يمثل كل رمز إجراءً معينًا تريد مكافأته. انقر على + إضافة رمز على المصدر الخاص بك لإنشاء واحد.

الحقل مطلوب الوصف
الرمز نعم القيمة الدقيقة المرسلة في حمولة الويب هوك (مثل quiz_completed). يجب أن تتطابق مع ما ترسله منصتك الخارجية.
اسم العرض نعم اسم سهل الفهم يظهر في لوحة الإدارة وسجل المعاملات (مثل "الاختبار مكتمل").
الوصف لا ملاحظة اختيارية لفريقك حول متى يتم استخدام هذا الرمز.
كمية البذور نعم عدد البذور التي سيتم منحها في كل مرة يتم فيها تفعيل هذا الرمز. الافتراضي هو 1.
الحد الأقصى للبذور/العميل لا الحد الأقصى من البذور التي يمكن أن يكسبها عميل واحد من هذا الرمز. اتركه فارغًا لعدم وجود حد. بمجرد أن يصل العميل إلى هذا الحد، ستعود مكالمات الويب هوك الإضافية لهم بنجاح ولكن ستمنح 0 بذور.
فترة الانتظار (ساعات) لا الحد الأدنى من الساعات بين الجوائز لنفس العميل على هذا الرمز. يمنع الإساءة عن طريق تحديد عدد المرات التي يمكن أن يكسب فيها العميل البذور. اتركه فارغًا لعدم وجود فترة انتظار.
مفعل تبديل لتفعيل أو تعطيل هذا الرمز دون حذفه. الرموز المعطلة تعيد خطأ 403.

الخطوة 3: تكوين منصتك الخارجية

قم بإعداد منصتك الخارجية (Zapier، Typeform، تطبيق مخصص، إلخ) لإرسال طلب POST إلى عنوان URL للويب هوك الخاص بك كلما حدث الإجراء. راجع قسم تنسيق الطلب أدناه للحصول على تنسيق الحمولة الدقيقة.


شرح الرموز والحدود

تعمل الرموز وحدودها معًا لتمنحك تحكمًا دقيقًا في كيفية منح البذور:

كمية البذور

يمتلك كل رمز كمية ثابتة من البذور. في كل مرة يتم فيها تفعيل الويب هوك بهذا الرمز، يتلقى العميل بالضبط هذا العدد من البذور. على سبيل المثال، إذا قمت بتعيين "quiz_completed" إلى 5 بذور، فإن كل مكالمة ويب هوك مؤهلة تمنح 5 بذور.

الحد الأقصى للبذور لكل عميل

يحدد هذا حدًا مدى الحياة لكل عميل لكل رمز. إنه إجمالي البذور التي يمكن أن يكسبها هذا العميل من هذا الرمز المحدد، وليس عدد المرات التي يمكنهم تفعيلها.

مثال: تقوم بإنشاء رمز quiz_completed مع كمية البذور = 5 و الحد الأقصى للبذور/العميل = 15.
  • الاختبار الأول المكتمل → +5 بذور (الإجمالي: 5) ✅
  • الاختبار الثاني المكتمل → +5 بذور (الإجمالي: 10) ✅
  • الاختبار الثالث المكتمل → +5 بذور (الإجمالي: 15) ✅
  • الاختبار الرابع المكتمل → +0 بذور (تم الوصول إلى الحد) — تعود بنجاح ولكن لا تمنح بذور

فترة الانتظار (ساعات)

تحدد الحد الأدنى من الوقت الذي يجب الانتظار بين منح البذور لنفس العميل على نفس الرمز. يبدأ مؤقت فترة الانتظار من آخر جائزة ناجحة.

مثال: تقوم بإنشاء رمز daily_visit مع كمية البذور = 2 و فترة الانتظار = 24 ساعة.
  • الاثنين 10 صباحًا → +2 بذور ✅
  • الاثنين 3 مساءً → +0 بذور (فترة الانتظار نشطة، حاول مرة أخرى بعد 19 ساعة)
  • الثلاثاء 11 صباحًا → +2 بذور ✅
نصيحة: يمكنك دمج كلا الحدين! على سبيل المثال، قم بتعيين رمز مع البذور = 10، الحد الأقصى = 30، و فترة الانتظار = 168 ساعة (7 أيام) لمنح 10 بذور في الأسبوع، حتى 30 إجمالي.

تنسيق الطلب

أرسل طلب POST إلى عنوان URL للويب هوك الخاص بك مع جسم JSON التالي:

{
  "code": "your_code_here",
  "customer": {
    "email": "customer@example.com",
    "shopify_customer_id": "12345",
    "first_name": "Jane",
    "last_name": "Smith"
  },
  "metadata": {
    "quiz_score": 95,
    "source_page": "spring-quiz"
  }
}
الحقل مطلوب الوصف
code نعم قيمة الرمز التي تتطابق مع واحدة من الرموز التي قمت بتكوينها (مثل quiz_completed)
customer.email نعم* عنوان البريد الإلكتروني للعميل. يستخدم للعثور على العميل أو إنشائه. مطلوب للعملاء الجدد.
customer.shopify_customer_id لا* معرف Shopify الخاص بالعميل. يمكن استخدامه بدلاً من البريد الإلكتروني لتحديد العملاء الحاليين.
customer.first_name لا الاسم الأول للعميل. يستخدم عند إنشاء عملاء جدد.
customer.last_name لا اسم العائلة للعميل. يستخدم عند إنشاء عملاء جدد.
metadata لا أي بيانات إضافية تريد تخزينها مع المعاملة (مثل درجات الاختبار، معلومات الصفحة). يتم تخزينها كـ JSON ومرئية في السجلات.

* يجب أن يكون واحد على الأقل من البريد الإلكتروني أو معرف_shopify_customer مطلوبًا. البريد الإلكتروني مطلوب عندما لا يكون العميل موجودًا بالفعل في LoyaltyTree.


التحقق من توقيع HMAC (موصى به)

للتحقق من أن الطلبات تأتي حقًا من منصتك (وليس من شخص ما وجد عنوان URL للويب هوك الخاص بك)، قم بتوقيع طلباتك باستخدام HMAC-SHA256.

كيفية توقيع طلبك:
  1. خذ جسم الطلب JSON الخام كسلسلة
  2. أنشئ تجزئة HMAC-SHA256 باستخدام سر الويب هوك كمفتاح
  3. قم بتضمين التجزئة المشفرة بالهيكس في أحد الرؤوس المدعومة

رؤوس التوقيع المدعومة (يتحقق LoyaltyTree من كل هذه):

  • X-Webhook-Signature
  • X-Hub-Signature-256
  • X-Signature

يمكن أن تكون قيمة التوقيع إما التجزئة المشفرة بالهيكس الخام أو مسبوقة بـ sha256= (يتم قبول كلا التنسيقين).

بديل: مصادقة الرمز العادي

إذا لم يكن توقيع HMAC ممكنًا في منصتك، يمكنك تمرير سر الويب هوك الخاص بك كرمز عادي في رأس X-Token. سيقارن LoyaltyTree مباشرة مع سرك.

مثال: التوقيع باستخدام Node.js

const crypto = require('crypto');

const payload = JSON.stringify({ code: 'quiz_completed', customer: { email: 'jane@example.com' } });

const signature = crypto .createHmac('sha256', 'your_webhook_secret') .update(payload) .digest('hex');

fetch('https://loyaltytree.eco/webhooks/inbound/YOUR_SOURCE_ID', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Webhook-Signature': signature }, body: payload });

مثال: التوقيع باستخدام Python

import hmac, hashlib, json, requests

payload = json.dumps({ "code": "quiz_completed", "customer": {"email": "jane@example.com"} })

signature = hmac.new( b'your_webhook_secret', payload.encode('utf-8'), hashlib.sha256 ).hexdigest()

requests.post( 'https://loyaltytree.eco/webhooks/inbound/YOUR_SOURCE_ID', headers={ 'Content-Type': 'application/json', 'X-Webhook-Signature': signature }, data=payload )

مثال: استخدام cURL (للاختبار)

curl -X POST https://loyaltytree.eco/webhooks/inbound/YOUR_SOURCE_ID \
  -H "Content-Type: application/json" \
  -H "X-Token: your_webhook_secret" \
  -d '{"code":"quiz_completed","customer":{"email":"jane@example.com"}}'

تنسيق الاستجابة

استجابة ناجحة (200)

{
  "success": true,
  "seeds_awarded": 5,
  "transaction_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "customer_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef"
}

ناجحة ولكن محدودة (200)

عندما تمنع فترة الانتظار أو الحد الأقصى للبذور الجائزة، لا تزال تحصل على استجابة 200 ولكن مع 0 بذور وتفسير:

{
  "success": true,
  "seeds_awarded": 0,
  "message": "فترة الانتظار نشطة. حاول مرة أخرى بعد 18 ساعة."
}

// أو

{ "success": true, "seeds_awarded": 0, "message": "تم منح الحد الأقصى من البذور (15) بالفعل لهذا الرمز." }

استجابات الأخطاء

حالة HTTP خطأ المعنى
400 الحقل المطلوب مفقود: الرمز لم يتم تضمين حقل code في جسم الطلب
400 الحقل المطلوب مفقود: customer.email أو customer.shopify_customer_id لم يتم تقديم معرف العميل
400 رمز غير معروف: xyz الرمز المرسل لا يتطابق مع أي رموز تم تكوينها لهذا المصدر
401 توقيع الويب هوك أو الرمز غير صالح تجزئة HMAC أو الرمز لا تتطابق. تحقق من سر الويب هوك الخاص بك.
403 مصدر الويب هوك معطل تم تعطيل المصدر في لوحة الإدارة
403 الرمز معطل: xyz تم تعطيل الرمز المحدد
404 مصدر الويب هوك غير موجود معرف المصدر في عنوان URL غير موجود. تحقق من عنوان URL للويب هوك.

أمثلة حالات الاستخدام

🧩 إكمال الاختبار

كافئ العملاء على إكمال اختبار على موقعك (مبني باستخدام Typeform، Google Forms، إلخ).

  • الرمز: quiz_completed
  • البذور: 10
  • الحد الأقصى للبذور: 10 (مرة واحدة فقط)
  • فترة الانتظار: لا شيء
📋 استجابة الاستطلاع

منح البذور عندما يكمل العميل استطلاع ما بعد الشراء.

  • الرمز: survey_completed
  • البذور: 5
  • الحد الأقصى للبذور: 25 (حتى 5 استطلاعات)
  • فترة الانتظار: 168 ساعة (مرة واحدة في الأسبوع)
🎂 مكافأة عيد الميلاد

منح البذور في عيد ميلاد العميل عبر منصة التسويق الخاصة بك.

  • الرمز: birthday_reward
  • البذور: 25
  • الحد الأقصى للبذور: لا شيء (سنوي)
  • فترة الانتظار: 8760 ساعة (365 يومًا)
📸 علامة Instagram

كافئ العملاء الذين يضعون علامة على علامتك التجارية على Instagram (تم التحقق منها عبر فريقك الاجتماعي أو الأداة).

  • الرمز: instagram_tag
  • البذور: 15
  • الحد الأقصى للبذور: 60 (حتى 4 علامات)
  • فترة الانتظار: 72 ساعة (مرة كل 3 أيام)

الاتصال بـ Zapier

Zapier هو واحد من أكثر الطرق شيوعًا لربط LoyaltyTree بمئات التطبيقات الأخرى. نحن نبني تكامل LoyaltyTree مخصص في متجر تطبيقات Zapier، مما سيجعل الإعداد أسهل بكثير — ابحث عنه في سوق Zapier.

💡 قريبًا: تكامل متجر تطبيقات Zapier

نحن نضيف LoyaltyTree كتطبيق أصلي في Zapier. بمجرد توفره، ستتمكن من البحث عن "LoyaltyTree" في دليل تطبيقات Zapier وربطه مباشرة — لا حاجة لتكوين ويب هوك. تابعونا!

في هذه الأثناء، يمكنك استخدام إجراء Webhooks by Zapier للاتصال الآن:

الإعداد باستخدام Webhooks من Zapier:
  1. إنشاء Zap مع الزناد المطلوب (مثل "استجابة جديدة من Typeform")
  2. إضافة خطوة إجراء: Webhooks by Zapier → POST
  3. تعيين عنوان URL إلى عنوان URL للويب هوك الوارد الخاص بـ LoyaltyTree
  4. تعيين نوع الحمولة إلى JSON
  5. تعيين الحقول:
    • code → قيمة الرمز الخاصة بك (مثل "quiz_completed")
    • customer.email → البريد الإلكتروني للمستجيب من الزناد
  6. تحت الرؤوس، أضف X-Token مع قيمة سر الويب هوك الخاصة بك
  7. اختبر وقم بتمكين Zap الخاص بك

 

الاتصال بـ Make (Integromat)

يمكنك أيضًا استخدام وحدة HTTP / إجراء طلب من Make لإرسال الويب هوكس إلى LoyaltyTree. قم بتكوينها بنفس طريقة Zapier — قم بتعيين عنوان URL، أضف جسم JSON مع code و customer، وأدخل سرك في رأس X-Token.


سجلات الويب هوك

يتم تسجيل كل مكالمة ويب هوك واردة ومرئية في قسم الويب هوكس الواردة في صفحة التكاملات الخاصة بك. تظهر السجلات:

  • الطابع الزمني – متى تم استلام الويب هوك
  • المصدر – أي مصدر استقبله
  • الحالة – نجاح أو فشل
  • التفاصيل – الرمز المستخدم، البذور الممنوحة، أو رسالة الخطأ
  • الحمولة – جسم الطلب الكامل (مشفر أثناء الراحة)

استخدم السجلات للتحقق من أن تكامل الخاص بك يعمل بشكل صحيح ولتشخيص أي مشاكل.

 


استكشاف الأخطاء وإصلاحها

الحصول على 401 "توقيع الويب هوك غير صالح"
  • تأكد من أنك تقوم بتوقيع نص جسم JSON الدقيق الذي ترسله (لا توجد مسافات إضافية أو إعادة تنسيق)
  • تحقق من أنك تستخدم سر الويب هوك الصحيح (يمكنك الكشف عنه في لوحة الإدارة)
  • إذا لم يكن توقيع HMAC ممكنًا، استخدم رأس X-Token مع سرك كقيمة عادية
  • يمكنك إعادة توليد السر من إعدادات المصدر إذا لزم الأمر
الحصول على 400 "رمز غير معروف"
  • يجب أن تتطابق قيمة code في طلبك بالضبط مع رمز قمت بتكوينه في لوحة الإدارة
  • الرموز حساسة لحالة الأحرف: Quiz_Completed تختلف عن quiz_completed
  • تحقق من أن الرمز مفعل (ليس معطلًا)
البذور الممنوحة هي 0
  • تحقق مما إذا كان العميل قد وصل إلى حد البذور الأقصى/العميل لهذا الرمز
  • تحقق مما إذا كانت فترة الانتظار لا تزال نشطة — ستخبرك رسالة الاستجابة بعدد الساعات التي يجب الانتظار
  • كلاهما يعود HTTP 200 مع seeds_awarded: 0 وتفسير في حقل message
عدم إنشاء العميل
  • يتطلب العملاء الجدد عنوان بريد إلكتروني. إذا كنت ترسل فقط shopify_customer_id، يجب أن يكون العميل موجودًا بالفعل في LoyaltyTree.
  • إذا تم تقديم كل من البريد الإلكتروني ومعرف Shopify، يبحث LoyaltyTree أولاً بواسطة البريد الإلكتروني، ثم بواسطة معرف Shopify، وينشئ عميلًا جديدًا فقط إذا لم يتطابق أي منهما.

الأمان

  • يحصل كل مصدر على سر ويب هوك فريد مكون من 64 حرفًا، يتم إنشاؤه تلقائيًا ومشفّر أثناء الراحة
  • يمكن إعادة توليد الأسرار في أي وقت من إعدادات المصدر (يتوقف السر القديم عن العمل على الفور)
  • تكون حمولة الطلبات مشفرّة في السجلات من أجل الخصوصية
  • يستخدم التحقق من التوقيع مقارنة آمنة من حيث التوقيت لمنع هجمات التوقيت
  • يمكن تعطيل المصادر والرموز بشكل فردي دون حذفها

Was this helpful?

Let us know how we can improve our documentation.

contact_support

Still need help?

Our support team is available to assist you with any questions or technical issues.

Contact Support arrow_forward
feedback

Suggest an edit

Did you find an error or missing information? Help us improve our documentation.

Edit on GitHub open_in_new