أتمتة إرسال رسائل دعوة 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 إعجابًا

This is awesome thank you for the feature and clear instructions!

Is it possible to also set the custom group when generating an invite, like you can from within the app?

That can be done by adding a group_names key to the Headers field. Its value should be set to a comma separated list of group names. I’ll add an example of this to the topic.

The basic approach that’s used in this topic will work for any API request to Discourse.

3 إعجابات

Awesome!! I think the dialog accepts a custom message too, guessing that can be done the same way?

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

I tried setting this up this AM and was running into a 400 error. With a little bit of debugging, I found that the auth-related steps need to go in the headers section as instructed, but the actual form values (email, group name, and custom message) need to go in the data section as key/value sets.

Once I made that change, though, it worked perfectly!

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

Thanks for that, @simon!

Are there any descriptions on meta about alternative ways to create an automated process for sending an invite email after the reader signed up to an offering and to which you could link here?

Thanks for testing that! What I’m finding is that when no custom_message or group_names are included in the request, passing the email in the Headers works. It’s not the correct way to pass the email address though. I’ve updated the guide to use the Data section for setting the email address, and have included examples for adding users to groups and including a custom message.

4 إعجابات

I’m not aware of other services that are similar to Zapier, but I’m sure there are some out there. You can make requests directly to the Discourse API without using a third party service. The main requirement for doing this is that you have an application to make the requests from. This can be something a simple as a WordPress site.

A good resource on Meta for getting started with the API is Reverse engineer the Discourse API. You can test API requests with CURL from your computer’s terminal, or with a service like Postman.

إعجابَين (2)

Thank you! Most of what you write I have no idea about… but I’ll check I’ll out your links and see if so can understand anything :smiley:

إعجابَين (2)

@simon

Quick question:

When I send an automated invite through Zapier, would this then be an already personalized link, or a link to the general login page to my forum (where someone can log in and also create an account)?

I would like to avoid that everybody and their dog who knows the login page creates an account. How can that best be avoided?

When you send an invite link through Zapier you are triggering exactly the same action as if you had clicked the ‘Send an Invite’ link from your account’s Invite page.

Creating an invite will send an email to invited user’s email address. That email contains a link to a page where the invited user can set their name and password, and login to their new account. The email address for the new account is set by the email address that you used for the invite.

Only users who have been sent an invite can create an account through this page. If you would like to only allow invited users to register for your site, go to the Login section of your Site Settings and select the invite only site setting.

The best way to get a sense of how invites work is to invite yourself to your site. You can use a throw-away gmail address for this. You will need to log out of the site before you will be able to accept your invite.

3 إعجابات

Ah, awesome info. Thanks!!

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

Thanks for the great tutorial! Is there a way to add a topic id that the user gets redirected to after signing up like in the bulk invite feature?

It is possible to invite a new user to a topic with a similar approach to what is outlined above, but the URL that you setup in the Action step needs to point to the topic. For example, to invite a user to a topic with the id 123 you would add the URL https://forum.example.com/t/123/invite to the Action step. You would then add the email and the optional custom_message and group_names parameters in the same way as they are outlined in the guide.

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)