هل ترغب في استخدام Webhooks الخاصة بـ Discourse لتشغيل مهمة عبر Zapier؟ لنبدأ!
نصيحة: يمتلك Zapier الآن تكاملًا رسميًا مع Discourse يحتوي على محفزات وإجراءات مدمجة (مثل “منشور جديد”، “إنشاء منشور”). للحالات الاستخدامية الشائعة، يعد هذا الخيار أبسط من إعداد Webhooks العامة يدويًا. يغطي الدليل أدناه نهج Webhook اليدوي، الذي يمنحك مرونة أكبر والوصول إلى جميع أنواع أحداث Discourse.
يتطلب Zapier محفزًا وإجراءً. في هذا الدليل، سيكون المحفز هو Webhook الخاص بـ Discourse، بينما سيكون الإجراء هو إرسال بريد إلكتروني.
إرسال بريد إلكتروني عند أي حدث للمستخدم
سنقوم الآن بإعداد Zap لإرسال بريد إلكتروني عند أي حدث للمستخدم (مثل إنشاء مستخدم، أو اعتماده، أو تحديثه، أو تسجيل دخوله، أو تسجيل خروجه، أو تعليقه، وأكثر من ذلك). لتفعيل المحفز عند حدث مستخدم محدد، راجع تفعيل المحفز عند حدث مستخدم محدد أدناه.
إنشاء Webhook لـ Discourse
-
قم بإنشاء Webhook جديد لـ Discourse لحدث المستخدم
سنقوم بتحديث “عنوان URL للحمولة” (Payload URL) بمجرد إنشاء عنوان URL للـ Webhook في الخطوات التالية.
إنشاء Zap جديد
ابحث عن هذا الزر في لوحة تحكم Zapier: ![]()
إعداد المحفز
-
اختر Webhook كمحفز. ابحث عن:
-
اختر المحفز
تريد تحديد “Catch Hook”
-
يمكنك تخطي خطوة “إعداد Webhooks بواسطة Zapier Hook”.
اضغط فقط على “متابعة”.
-
اختبر المحفز
انسخ عنوان URL المخصص للـ Webhook الذي تم إنشاؤه والصقه في قسم “عنوان URL للحمولة” (Payload URL) الخاص بـ Webhook الخاص بـ Discourse الذي تم إنشاؤه مسبقًا.

الآن جرب إنشاء/تحديث/اعتماد مستخدم في مثيل Discourse الخاص بك.
إذا اتبعت جميع الخطوات بنجاح وقمت بإنشاء/تحديث/اعتماد مستخدم، فسترى رسالة نجاح في Zapier:
سيؤدي النقر فوق ارتباط “عرض hook” (view your hook) إلى إظهار البيانات المحللة.
إعداد الإجراء في Zapier
-
اختر البريد الإلكتروني كإجراء. ابحث عن:
-
اضغط على “حفظ + متابعة”
-
إعداد قالب البريد الإلكتروني
قم بتعديل قالب البريد الإلكتروني بشكل أكبر حسب متطلباتك. لاحظ أنه يمكنك استخدام زر
+لإضافة المزيد من البيانات المحللة عبر استجابة JSON.الآن اختبر الإجراء، يجب أن تستقبل بريدًا إلكترونيًا من Zapier.
تشغيل Zap
هذا كل شيء، الآن ستستقبل بريدًا إلكترونيًا لكل حدث للمستخدم. قائمة كاملة بأحداث المستخدم التي يمكن أن تشغل Webhook هي:
| اسم الحدث | الوصف |
|---|---|
user_created |
تم إنشاء حساب مستخدم جديد |
user_approved |
تم اعتماد مستخدم |
user_updated |
تم تحديث ملف مستخدم |
user_logged_in |
قام مستخدم بتسجيل الدخول |
user_logged_out |
قام مستخدم بتسجيل الخروج |
user_confirmed_email |
قام مستخدم بتأكيد بريده الإلكتروني |
user_destroyed |
تم حذف حساب مستخدم |
user_suspended |
تم تعليق مستخدم |
user_unsuspended |
تم إلغاء تعليق مستخدم |
user_anonymized |
تم إخفاء هوية حساب مستخدم |
![]()
تفعيل المحفز عند حدث مستخدم محدد
هل ترغب في إرسال رسائل بريد إلكتروني فقط لحدث مستخدم محدد، ربما فقط عند إنشاء الحساب ولكن ليس عند التحديث؟ استخدم محفز “Catch Raw Hook”.
- انقر على “إظهار خيارات أقل شيوعًا”
- انقر على “Catch Raw Hook”
- اتبع الخطوات المتبقية لإعداد المحفز بشكل طبيعي.
بمجرد إعداد المحفز، أضف فلترًا.
- انقر على “إضافة خطوة”
- انقر على “فلتر”
- انقر على “حفظ ومتابعة”
- اختر “Headers Http X Discourse Event” من القائمة المنسدلة الأولى.
- اختر “(نص) يطابق تمامًا” من القائمة المنسدلة الثانية.
- أدخل العنوان الكامل الذي تريد تصفيته (على سبيل المثال،
user_logged_out). - إذا كنت تريد من Zapier التشغيل على رؤوس متعددة، انقر على “+OR” وأضفها تمامًا مثل الأولى.
- انقر على “اختبار ومتابعة”
- راجع اختبار الفلتر، ثم انقر على “متابعة”
بمجرد إعداد الفلتر، قم بإعداد الإجراء المفضل لديك.
استخدام رأس Webhook الكامل
للحصول على الوصول إلى الرأس، اتبع الخطوات السابقة - اختر “Catch Raw Hook” ثم أضف فلترًا. قم بإعداد الفلتر للاستمرار فقط إذا تطابق Headers Http X Discourse Event مع الحدث الذي تبحث عنه.
الصعوبة هنا هي أن Catch Raw Hook يمرر جسم Webhook الخام. الإجراء النهائي الذي أستخدمه يحتاج إلى بيانات محللة من الجسم. ما يعمل معي هو إضافة إجراء كود (Code Action) بعد الفلتر. في نافذة إجراء الكود، اختر “تشغيل JavaScript”:
سيقوم Zapier بإنشاء كائن inputData يمكنك إضافة خصائص سميت له. أضف اسمًا لخاصيتك في العمود الأيسر. من العمود الأيمن، اختر “Catch Raw Hook” من القائمة المنسدلة، ثم اختر “Raw Body”:
قم بالتمرير لأسفل الصفحة لرؤية إدخال الكود:
ثم تحتاج إلى استبدال كود العينة بكود يحلل الجسم الخام ويعيد كائنًا يحتوي على القيم التي تحتاجها لإجرائك النهائي. إليك الكود الذي أستخدمه. الكائن الذي يعيده يتم استخدامه بواسطة تكامل Salesforce. يتطلب Salesforce اسم عائلة، لذا إذا لم يكن هناك اسم عائلة، يتم إرجاع خطأ:
const parsed = JSON.parse(inputData.raw);
if (parsed.user) {
const user = parsed.user,
name = user.name,
userFields = user.user_fields;
let firstName,
lastName,
company;
if (name) {
const splitName = name.split(' ');
firstName = splitName[0];
lastName = splitName[1]
}
if (userFields) {
company = userFields['10'];
}
if (lastName) {
return {id: user.id,
username: user.username,
lastName: lastName,
firstName: firstName,
email: user.email,
company: company
};
} else {
return {error: "Missing last name"}
}
} else {
return {error: "A user object was not returned"};
}
لتجنب إجراء طلب فاشل في الإجراء النهائي، يمكن إضافة فلتر آخر من Zapier. قم بإعداد هذا الفلتر للاستمرار فقط إذا لم يكن حقل الخطأ الذي يعيده JavaScript موجودًا:
يمكنك بعد ذلك إضافة إجرائك النهائي. عند اختيار الحقول المراد استخدامها في الإجراء النهائي، استخدم الخصائص التي أعادها إجراء تشغيل JavaScript.























