تشغيل مهمة في Zapier باستخدام Webhooks الخاصة بـ Discourse

هل ترغب في استخدام Webhooks الخاصة بـ Discourse لتشغيل مهمة عبر Zapier؟ لنبدأ!

:bulb: نصيحة: يمتلك 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

تشغيل 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 تم إخفاء هوية حساب مستخدم

:tada:


تفعيل المحفز عند حدث مستخدم محدد

هل ترغب في إرسال رسائل بريد إلكتروني فقط لحدث مستخدم محدد، ربما فقط عند إنشاء الحساب ولكن ليس عند التحديث؟ استخدم محفز “Catch Raw Hook”.

  1. انقر على “إظهار خيارات أقل شيوعًا”
  2. انقر على “Catch Raw Hook”
  3. اتبع الخطوات المتبقية لإعداد المحفز بشكل طبيعي.

بمجرد إعداد المحفز، أضف فلترًا.

  1. انقر على “إضافة خطوة”
  2. انقر على “فلتر”
  3. انقر على “حفظ ومتابعة”
  4. اختر “Headers Http X Discourse Event” من القائمة المنسدلة الأولى.
  5. اختر “(نص) يطابق تمامًا” من القائمة المنسدلة الثانية.
  6. أدخل العنوان الكامل الذي تريد تصفيته (على سبيل المثال، user_logged_out).
  7. إذا كنت تريد من Zapier التشغيل على رؤوس متعددة، انقر على “+OR” وأضفها تمامًا مثل الأولى.
  8. انقر على “اختبار ومتابعة”
  9. راجع اختبار الفلتر، ثم انقر على “متابعة”

بمجرد إعداد الفلتر، قم بإعداد الإجراء المفضل لديك.

استخدام رأس 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.

32 إعجابًا