أتمتة إرسال رسائل دعوة Discourse باستخدام Zapier

يمكن استخدام واجهة برمجة تطبيقات Discourse لأتمتة إرسال رسائل البريد الإلكتروني للدعوة من منتدىك عند تنفيذ إجراء ما على تطبيق خارجي. بالنسبة للعديد من التطبيقات، يمكنك استخدام Zapier لإعداد هذا دون الحاجة إلى كتابة أي تعليمات برمجية.

أحد حالات الاستخدام الشائعة لهذا هو دعوة المستخدمين إلى منتدىك عندما يشترون منتجًا أو يشتركون في خدمة خارجية. بالنسبة للمثال في هذا الموضوع، سأستخدم تكامل Zapier WordPress لتشغيل إرسال دعوة من Discourse عند اشتراك مستخدم جديد في موقع WordPress.

إعداد خطوة الزناد (trigger step) على Zapier

انتقل إلى لوحة معلومات Zapier وابحث عن التطبيق الذي تريد تشغيل البريد الإلكتروني للدعوة منه. في لقطات الشاشة أدناه، اخترت WordPress كـ “زناد”.

التكوين الوحيد المطلوب لهذا هو ربط “زناد” WordPress بحساب WordPress، واختيار حدث “مستخدم جديد” (New User) لتشغيل “الزناد”.

إعداد خطوة الإجراء (action step) لإرسال الدعوة

انقر فوق زر “إضافة خطوة” (Add a Step) ثم انقر فوق “إجراء/بحث” (Action/Search) من القائمة المنسدلة.

أدخل “webhook” في قائمة البحث ثم حدد “Webhooks by Zapier” من قائمة الإجراءات. ستتم إضافة خطوة إجراء Webhook إلى الشريط الجانبي لـ “الزناد” الخاص بك، وسيتم فتح نموذج يسمح لك باختيار نوع الطلب الذي تريد أن يقوم به الـ Webhook.

حدد POST من النموذج ثم انقر فوق “متابعة” (Continue).

يسمح لك النموذج الذي يفتح بتكوين طلب POST الذي يتم إجراؤه على Discourse. في حقل “عنوان URL” (URL)، أدخل عنوان URL الأساسي للمنتدى الخاص بك، متبوعًا بـ /invites. على سبيل المثال، عنوان URL الأساسي لمنتدى هو https://demo.scossar.com، لذا فإن الرابط الكامل لمسار الدعوات هو https://demo.scossar.com/invites

أنت الآن بحاجة إلى تكوين أقسام النموذج الخاصة بـ نوع الحمولة (Payload Type)، و__البيانات__ (Data)، و__العناوين__ (Headers). يمكن ترك جميع الأقسام الأخرى في النموذج بقيمها الافتراضية.

يخبر “نوع الحمولة” (Payload Type) Zapier بتنسيق إرسال الحمولة به. يجب ضبطه على Json.

يُستخدم قسم “البيانات” (Data) لإخبار Discourse بعنوان البريد الإلكتروني الذي سيتم إرسال الدعوة إليه، ولتعيين قائمة اختيارية بأسماء المجموعات ورسالة مخصصة. لدعوة مستخدم دون إضافته إلى مجموعات أو تضمين رسالة مخصصة، أدخل النص email كمفتاح بيانات (Key)، ثم انقر فوق أيقونة “إدراج حقل” (Insert a Field) لفتح القائمة المنسدلة للحقل. قم بالتمرير لأسفل القائمة حتى ترى القيمة التي تم تمريرها من تطبيق الزناد الخاص بك وتحتوي على بريد المستخدم الإلكتروني. عند استخدام WordPress كتطبيق زناد، يجب أن يبدو قسم البيانات المكتمل مشابهًا لهذا:

لإضافة المستخدمين تلقائيًا إلى المجموعات عند قبولهم للدعوة، انقر فوق أيقونة :heavy_plus_sign: في قسم البيانات لإضافة حقل جديد. اضبط مفتاح الحقل على group_names. اضبط قيمة الحقل على قائمة مفصولة بفواصل لأسماء المجموعات التي تريد إضافة المستخدمين إليها. لتضمين رسالة مخصصة في البريد الإلكتروني للدعوة، أنشئ حقلًا آخر بمفتاحه مضبوطًا على custom_message وقيمته مضبوطة على الرسالة التي تريد إرسالها.

ملاحظة: من خلال إضافة خطوة “التعليمات البرمجية” (Code) بعد خطوة الزناد الخاصة بـ Zap، يجب أن يكون من الممكن تعيين أسماء المجموعات ورسالة مخصصة ديناميكيًا لمستخدمين محددين.

يُستخدم قسم “العناوين” (Headers) للمصادقة على طلبك. لتكوين حقل “العناوين”، ستحتاج إلى إنشاء مفتاح API على موقع Discourse الخاص بك. للقيام بذلك، انتقل إلى صفحة “المسؤول / واجهة برمجة التطبيقات” (Admin / API) الخاصة بموقع Discourse الخاص بك وانقر على زر “مفتاح API جديد” (New API Key). عند إنشاء المفتاح، قم بتعيينه لمستخدم من الموظفين واضبط النطاق على شامل (Global)، أو استخدم نطاق مفصل (Granular) مع تحديد المربع الدعوات > إنشاء (Invites > Create).

الآن، في قسم “العناوين” في Zap، أدخل أزواج المفتاح/القيمة التالية. استبدل أي قيم قمت بتضمينها بين قوسين بقيم مناسبة لموقعك. التمييز بين حالتي الأحرف لأسماء المفاتيح مهم.

Api-Username: <اسم المستخدم للموظف الذي تريد إرسال الدعوات منه>
Api-Key: <مفتاح API الذي قمت بإنشائه>
Content-Type: application/json

يجب أن يبدو النموذج الآن مشابهًا للقطة الشاشة أدناه، ولكن مع اسم المستخدم و مفتاح API الخاص بك:

انقر فوق زر “متابعة” (Continue).

ستتمكن الآن من اختبار التكامل بالنقر فوق الزر “إرسال اختبار إلى Webhooks by Zapier” (Send Test To Webhooks by Zapier). سيتم إجراء الاختبار باستخدام البيانات التي قمت بإعدادها في خطوة الزناد الخاصة بك. سترى رسالة نجاح إذا كان كل شيء مهيأ بشكل صحيح، وإذا لم يكن المستخدم الذي قمت بإعداده في خطوة الزناد موجودًا بعد على منتدى Discourse الخاص بك، فسيتم إرسال بريد إلكتروني للدعوة وسترى رسالة نجاح على Zapier. بمجرد أن تجتاز خطوة الاختبار، انقر فوق زر “إنهاء” (Finish) وقم بتشغيل Zap الخاص بك.

للحصول على تفاصيل حول كيفية إجراء أنواع أخرى من الطلبات إلى واجهة برمجة تطبيقات Discourse باستخدام Zapier، راجع Make requests to the Discourse API with Zapier.

25 إعجابًا

هذا رائع، شكرًا لك على الميزة والتعليمات الواضحة!

هل من الممكن أيضًا تعيين المجموعة المخصصة عند إنشاء دعوة، مثلما يمكنك ذلك من داخل التطبيق؟

يمكن القيام بذلك عن طريق إضافة مفتاح group_names إلى حقل Headers. يجب أن تكون قيمته قائمة بأسماء المجموعات مفصولة بفواصل. سأضيف مثالًا على ذلك إلى الموضوع.

النهج الأساسي المستخدم في هذا الموضوع سيعمل مع أي طلب API إلى Discourse.

3 إعجابات

رائع!! أعتقد أن مربع الحوار يقبل رسالة مخصصة أيضًا، هل يمكن القيام بذلك بنفس الطريقة؟

إعجاب واحد (1)

لقد حاولت إعداد هذا صباح اليوم وواجهت خطأ 400. ومع قليل من التنقيح، اكتشفت أن الخطوات المتعلقة بالمصادقة يجب أن توضع في قسم الرؤوس كما هو موضح، لكن قيم النموذج الفعلية (البريد الإلكتروني، اسم المجموعة، والرسالة المخصصة) يجب أن توضع في قسم البيانات كمجموعات من المفاتيح والقيم.

وبعد إجراء هذا التغيير، عمل كل شيء بشكل مثالي!

إعجاب واحد (1)

شكرًا لك، @simon!

هل توجد أي وصفات في الميتا حول طرق بديلة لإنشاء عملية آلية لإرسال بريد إلكتروني لدعوة بعد أن يشترك القارئ في عرض ما، ويمكنك ربطها هنا؟

شكرًا لك على الاختبار! ما أكتشفه هو أنه عند عدم تضمين custom_message أو group_names في الطلب، فإن تمرير email في رؤوس الطلب يعمل. ومع ذلك، ليست هذه هي الطريقة الصحيحة لتمرير عنوان البريد الإلكتروني. لقد قمت بتحديث الدليل لاستخدام قسم البيانات لضبط عنوان البريد الإلكتروني، وأدرجت أمثلة لإضافة المستخدمين إلى المجموعات وتضمين رسالة مخصصة.

4 إعجابات

أنا لست على علم بخدمات أخرى مشابهة لـ Zapier، لكنني متأكد من وجود بعضها. يمكنك إرسال طلبات مباشرة إلى واجهة برمجة تطبيقات Discourse دون استخدام خدمة طرف ثالث. المتطلب الرئيسي للقيام بذلك هو أن يكون لديك تطبيق لإرسال الطلبات منه. يمكن أن يكون هذا شيئًا بسيطًا مثل موقع WordPress.

مورد جيد على ميتا للبدء مع واجهة برمجة التطبيقات هو Reverse engineer the Discourse API. يمكنك اختبار طلبات واجهة برمجة التطبيقات باستخدام CURL من طرفية جهاز الكمبيوتر الخاص بك، أو باستخدام خدمة مثل Postman.

إعجابَين (2)

شكرًا لك! لا أفهم معظم ما تكتبه… لكنني سأتحقق من روابطك وأرى ما إذا كان بإمكاني فهم أي شيء :smiley:

إعجابَين (2)

@سيمون

سؤال سريع:

عند إرسال دعوة آلية عبر Zapier، هل ستكون هذه رابطة مخصصة مسبقًا، أم رابطًا لصفحة تسجيل الدخول العامة إلى المنتدى (حيث يمكن للمستخدم تسجيل الدخول وإنشاء حساب أيضًا)؟

أود تجنب أن يقوم كل من يعرف صفحة تسجيل الدخول بإنشاء حساب. كيف يمكن تجنب ذلك بأفضل طريقة؟

عند إرسال رابط دعوة عبر Zapier، فإنك تُفعّل نفس الإجراء تمامًا كما لو نقرت على رابط “إرسال دعوة” من صفحة الدعوة في حسابك.

إن إنشاء دعوة سيؤدي إلى إرسال بريد إلكتروني إلى عنوان البريد الإلكتروني للمستخدم المدعو. يحتوي هذا البريد على رابط لصفحة يمكن للمستخدم المدعو من خلالها تعيين اسمه وكلمة المرور، وتسجيل الدخول إلى حسابه الجديد. يتم تعيين عنوان البريد الإلكتروني للحساب الجديد بناءً على عنوان البريد الإلكتروني الذي استخدمته لإرسال الدعوة.

فقط المستخدمون الذين تم إرسال دعوة إليهم يمكنهم إنشاء حساب من خلال هذه الصفحة. إذا كنت ترغب في السماح فقط للمستخدمين المدعوين بالتسجيل في موقعك، انتقل إلى قسم تسجيل الدخول في إعدادات الموقع وحدد إعداد الموقع الدعوة فقط.

أفضل طريقة للحصول على فكرة واضحة عن كيفية عمل الدعوات هي دعوة نفسك إلى موقعك. يمكنك استخدام عنوان بريد Gmail مؤقت لهذا الغرض. ستحتاج إلى تسجيل الخروج من الموقع قبل أن تتمكن من قبول دعوتك.

3 إعجابات

آه، معلومات رائعة. شكرًا لك!!

إعجاب واحد (1)

شكرًا لك على الدليل الرائع! هل توجد طريقة لإضافة معرف موضوع يتم توجيه المستخدم إليه بعد التسجيل، مثلما في ميزة الدعوة الجماعية؟

من الممكن دعوة مستخدم جديد إلى موضوع باستخدام نهج مشابه لما هو موضح أعلاه، ولكن يجب أن يشير الرابط الذي تقوم بإعداده في خطوة “الإجراء” إلى الموضوع. على سبيل المثال، لدعوة مستخدم إلى موضوع بمعرف 123، ستضيف الرابط https://forum.example.com/t/123/invite إلى خطوة “الإجراء”. ثم تضيف معاملات email و custom_message (اختياري) و group_names بنفس الطريقة الموضحة في الدليل.

3 إعجابات

مرحبًا سيمون،

شكرًا لك على منشورك!

لدي سؤالان، وإذا أمكنك مساعدتي، فسيكون ذلك رائعًا :slight_smile:

السؤال الأول/
من جهتي، يعمل رابط الدعوة مع الرسالة بشكل جيد، ولكن بغض النظر عن أسماء المجموعات (group_names) التي أضيفها، فإنني أتمكن فقط من الوصول إلى المجموعة العامة الافتراضية عند الانضمام إلى المنتدى.

هل تعلم ما إذا كان هناك شيء ما قد “يمنع” الدعوة إلى مجموعة خاصة محددة؟

رابط اسم المجموعة هو على هذا النحو: https://forum.[mywebsite].com/c/cercle/33

لذا لدي: group_names /// PUBLIC,cercle

كما جربت استخدام “رقم” بدلاً من اسم المجموعة (33) لهذه المجموعة، لكن الأمر لا يزال لا يعمل.

ربما توجد نوع من “القيود” في إعدادات المشرف للمنتدى، والتي تمنع دعوة المجموعات الخاصة؟

السؤال الثاني/
أود أن أتمكن من دعوة الأشخاص ليس فقط إلى “مجموعة خاصة”، بل إلى “مجموعة فرعية خاصة” (لا أعرف الاسم الصحيح لذلك).

هنا يمكنك أن ترى أن لدي المجموعة “RÉSERVÉ…”
وكل المجموعات الفرعية الصغيرة تحتها.

أود دعوة المستخدمين إلى مجموعات فرعية محددة.

هل تعلم كيف يمكنني فعل ذلك؟

شكرًا جزيلاً لك إذا أمكنك تخصيص بعض الوقت لمساعدتي في ذلك! :slight_smile:

إعجاب واحد (1)

تأكد من استخدام اسم المجموعة وليس اسم الفئة التي تسمح للمجموعة بالوصول إليها. يمكنك العثور على اسم المجموعة في رابط المجموعة، أو من حقل “الاسم” الخاص بالمجموعة:

إذا لم يحل ذلك المشكلة، فتأكد من أن مفتاح واجهة برمجة التطبيقات (API key) الخاص بـ Discourse الذي تضيفه إلى Zapier هو مفتاح عام لجميع المستخدمين. كما تأكد من أن اسم المستخدم الخاص بواجهة برمجة التطبيقات (API Username) المُعد في Zapier لديه صلاحية إضافة المستخدمين إلى المجموعة. أي اسم مستخدم مسؤول (admin) على موقعك سيؤدي الغرض.

أخبرني إذا لم يحل ذلك المشكلة بالنسبة لك.

يمكنك دعوة المستخدم إلى مجموعات متعددة عن طريق إضافة قائمة مفصولة بفواصل من أسماء المجموعات إلى حقل group_names في Zapier. لا يحتوي Discourse على مفهوم المجموعات الفرعية، لذا ستحتاج إلى إضافة اسم كل مجموعة تريد دعوة المستخدم إليها.

من لقطة الشاشة التي قدمتها، يبدو أنك تحاول منح المستخدم الوصول إلى فئة معينة وجميع فئاتها الفرعية. بدلاً من إنشاء مجموعة لكل فئة فرعية، يمكنك ببساطة السماح لمجموعة واحدة بالوصول إلى الفئة وجميع فئاتها الفرعية. يتم تكوين ذلك في قسم الأمان (Security) في صفحة تعديل الفئة.

إعجابَين (2)

شكرًا لك على ردك يا سيمون!

بخصوص واجهة برمجة التطبيقات (API):

لقد منحتُ الوصول لمستخدم واحد فقط (المسؤول)، وظننتُ أن ذلك كافٍ. لذا قمتُ بإنشاء واجهة برمجة تطبيقات جديدة لمنح الوصول لجميع المستخدمين.

لكنها لا تزال لا تعمل. لكن قد يكون لدي فهم للمشكلة الآن :slight_smile:

أحاول إضافة اسم “فئة” (category) في حقل “group_names”. لذا أعتقد أن هذا لن يعمل :).

لقد أساءتُ فهم مصطلحات المجموعات/الفئات/المواضيع…

في لقطة الشاشة، يمكنك رؤية قائمة تحتوي على ما يقرب من 15 فئة فرعية: TB، MT، RD، MA…)

على سبيل المثال، عنوان URL للفئة الفرعية الأولى هو: https://forum.MYWEBSITE.com/c/question-formactions/TBD/14

لذا أعتقد أنني أرغب في دعوة أعضاء جدد تلقائيًا إلى بعض الفئات الفرعية الخاصة، وليس إلى بعض المجموعات.

في عنوان URL الذي قدمته لك، أرغب في منح الوصول فقط إلى الفئة الفرعية “TBD” على سبيل المثال.

وسيمتلك مستخدم آخر الوصول فقط إلى فئة فرعية أخرى.

هل تعرف ما إذا كان ذلك ممكنًا؟

ربما عليّ فقط استبدال حقل “group_names” في Zapier بالحقل المخصص للفئات؟

إعجاب واحد (1)

المجموعات والفئات مصدر لارتباك كبير في نظام Discourse!

  1. المجموعات هي تجمعات للأشخاص.
  2. الفئات هي تجمعات للمواضيع. لا يمكنك دعوة الأشخاص إليها بحد ذاتها، ولكن يتم التحكم في الوصول إليها عبر المجموعات.

لتحقيق ما تريد، قم بإنشاء مجموعة. في إعدادات الأمان الخاصة بالفئة ذات الصلة، أضف صلاحية الوصول لتلك المجموعة. استخدم هذه المجموعة في واجهة برمجة التطبيقات (API) للدعوات. تم.

3 إعجابات

شكرًا لك على ردك يا ناثان!

سأجرب ذلك وسأشارك النتيجة هنا :wink:

إعجابَين (2)

حلولك تعمل بشكل ممتاز، شكرًا لك! :blush:

لدي سؤال آخر، ربما يمكنك أنت (أو @simon) مساعدتي فيه:

مع Zapier، هل توجد طريقة لمنح وصول إلى مجموعة جديدة للأشخاص الذين هم بالفعل أعضاء في Discourse؟

بشكل أساسي، هذا سير العمل الخاص بي:

1/ ينضم عضو إلى أحد دوراتي

2/ يقوم Zapier بجلب بريده الإلكتروني من منصتي التعليمية، ويرسل له دعوة للانضمام إلى Discourse الخاص بي + يضيفه تلقائيًا إلى المجموعة الصحيحة المرتبطة بالدورة التي انضم إليها للتو.

3/ في بعض الأحيان، بعد بضعة أشهر، ينضم هذا العضو نفسه إلى دورة أخرى: لذا، مع سير العمل الحالي، سيقوم Zapier بإرسال دعوة جديدة له للانضمام إلى Discourse، بينما هو بالفعل عضو، وبالتالي لن تعمل الدعوة.

أحتاج إلى أن يقوم Zapier بمنحه وصولاً إلى مجموعة جديدة إذا كان بالفعل عضوًا في Discourse الخاص بي.

هل ترى طريقة للقيام بذلك؟

إعجاب واحد (1)