قدم طلبات إلى واجهة برمجة تطبيقات Discourse باستخدام Zapier

يمكن أتمتة الطلبات المرسلة إلى واجهة برمجة تطبيقات Discourse من خلال إنشاء Zap يستخدم Webhook الخاص بـ Zapier كخطوة إجراء. ستصف هذه الموضوع كيفية تنفيذ الطلبات للإجراءات التالية:

  • إضافة مستخدم إلى مجموعة
  • منح شارة مخصصة

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

إعداد خطوة الزناد (Trigger)

يجب أن يحتوي كل Zap على خطوة زناد (Trigger) وخطوة إجراء (Action). يُستخدم الزناد لنقل البيانات من تطبيق ما إلى خطوة الإجراء في Zap. في بعض الحالات، يمكن استخدام الزناد أيضًا لمنع Zap من إكمال خطوة الإجراء ما لم تستوفِ بياناته شروطًا معينة.

لإعداد خطوة الإجراء، انتقل إلى لوحة تحكم Zapier واضغط على زر “إنشاء Zap” (Make a Zap). ستفتح نافذة بحث تطلب منك اختيار تطبيق الزناد.

بالنسبة للأمثلة في هذا الموضوع، سأستخدم حدث “مستخدم جديد” في WordPress كخطوة إجراء. والسبب في ذلك هو سهولة إعداده لاختبار مكالمات واجهة برمجة التطبيقات.

تتيح لك عقدة “اختبار هذه الخطوة” (Test This Step) في خطوة الزناد اختيار عينة من البيانات من تطبيق الزناد التي سيتم تمريرها إلى خطوة الإجراء في Zap. ستكون هذه البيانات مفيدة لإعداد خطوة الإجراء.

إضافة خطوة اختيارية لاسترجاع التفاصيل من Discourse

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

لحصول على تفاصيل مستخدم في Discourse من عنوان بريده الإلكتروني، أضف خطوة إجراء إلى Zap الخاص بك. اختر “GET” من قائمة إجراءات Webhook.

في خطوة تحرير قالب Webhook، أدخل الرابط الأساسي لموقع Discourse الخاص بك، متبوعًا بـ /admin/users/list/all.json في قسم الرابط (URL). على سبيل المثال، الرابط الأساسي لموقعي هو https://demo.scossar.com، لذا أدخلت https://demo.scossar.com/admin/users/list/all.json في حقل الرابط.

في قسم معلمات سلسلة الاستعلام (Query String Params)، أدخل “email” كمفتاح، ثم انقر على أيقونة “إدراج حقل” لفتح القائمة المنسدلة. اختر القيمة التي تم تمريرها بواسطة خطوة الزناد الخاصة بك والتي تحتوي على عنوان البريد الإلكتروني للمستخدم.

مصادقة الطلب

قم بالتمرير لأسفل النموذج إلى قسم الرؤوس (Headers). يُستخدم هذا القسم لمصادقة الطلب. يتطلب ثلاثة أزواج من المفاتيح/القيم:

  • Api-Username : اسم مستخدم لمدير موقعك. في معظم الحالات، سيكون مستخدم ‘system’ خيارًا جيدًا لهذا الغرض.
  • Api-Key : مفتاح API المرتبط باسم المستخدم الذي استخدمته في الزوج الأول من المفاتيح/القيم.
  • Content-Type : multipart/form-data

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

انقر على زر “متابعة” (Continue) لعرض البيانات المسترجعة من Discourse لهذا الطلب.

إضافة خطوة الإجراء النهائية

بمجرد إعداد الزناد والخطوة الاختيارية لاسترجاع البيانات من Discourse، انقر على رابط “إضافة خطوة” (Add a Step) واختر “Webhooks by Zapier” من قائمة الإجراءات. سيُطلب منك بعد ذلك اختيار طريقة الطلب التي ترغب في استخدامها في طلب واجهة برمجة التطبيقات الخاص بك إلى Discourse.

إليك أنواع الطلبات المطلوبة للأمثلة المستخدمة في هذا الموضوع:

  • إضافة مستخدم إلى مجموعة: PUT
  • منح شارة مخصصة: POST

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

ملاحظة: إذا كان طلبك يستخدم طريقة DELETE، فاختر “طلب مخصص” (Custom Request) من قائمة الإجراءات.

إعداد خطوة الإجراء النهائية

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

بمجرد إضافة أزواج المفاتيح/القيم للرؤوس، ستحتاج إلى ملء حقلي الرابط (URL) والبيانات (Data) في النموذج لطلب واجهة برمجة التطبيقات الخاص بك.

إضافة مستخدم إلى مجموعة

لإضافة مستخدم إلى مجموعة، يتم إجراء طلب PUT إلى /groups/<group_id>/members.json. أسهل طريقة للعثور على معرف المجموعة هي زيارة صفحة المجموعة عبر واجهة مستخدم Discourse، ثم إدخال .json في الرابط الموجود في شريط عناوين المتصفح. على سبيل المثال، يحتوي موقعي على مجموعة “دعم” (support) في https://demo.scossar.com/g/support. بالانتقال إلى https://demo.scossar.com/g/support.json، يمكنني رؤية أن معرف المجموعة هو 41. الرابط الأساسي لموقعي هو https://demo.scossar.com. يتم ضبط الرابط في خطوة الإجراء النهائية لإضافة المستخدمين إلى مجموعة على https://demo.scossar.com/groups/41/members.json.

يتطلب طلب إضافة المستخدمين إلى مجموعة معلمة واحدة - وهي قائمة مفصولة بفواصل بأسماء المستخدمين. في قسم البيانات (Data) في النموذج، أدخل “usernames” كمفتاح. ثم انقر على أيقونة “إدراج حقل” للبحث عن خاصية اسم المستخدم التي تم تمريرها إما من الزناد أو من خطوة الإجراء الاختيارية GET.

في حالتي، أريد اسم المستخدم الذي تم استرجاعه بواسطة خطوة GET، لذا أقوم بتوسيع قائمة “GET” وأختار “Username” من القائمة المنسدلة.

يمكن ترك جميع الأقسام الأخرى في النموذج بقيمتها الافتراضية.

انقر على زر “متابعة” (Continue) ثم اختبر خطوتك. إذا كان المستخدم الذي تم تمريره عبر الخطوات السابقة موجودًا على موقع Discourse الخاص بك، ولم يكن عضوًا بالفعل في المجموعة التي اخترتها، فيجب إضافته إلى المجموعة عند اختبار الخطوة.

إذا عمل كل شيء كما هو متوقع، فعّل Zap الخاص بك.

منح شارة مخصصة

لمنح شارة مخصصة لمستخدم، يتم إجراء طلب POST إلى الرابط الأساسي لموقعك + /user_badges. لموقعي، الرابط الخاص بمنح الشارات هو https://demo.scossar.com/user_badges. يبدو حقل الرابط المكتمل في Zapier كما يلي:

يتطلب قسم البيانات (Data) في النموذج زوجين من المفاتيح/القيم. أضف مفتاحًا “username” واضبطه على الحقل الذي يعيد اسم المستخدم. أضف مفتاحًا “badge_id” واضبطه على معرف الشارة التي ترغب في منحها. يمكنك العثور على معرف الشارة بالانتقال إلى صفحة Admin / Badges واختيار الشارة من القائمة الجانبية اليسرى. سترى معرف الشارة كآخر قيمة في الرابط الموجود في شريط عناوين المتصفح.

الشارة التي أقوم بمنحها لها معرف 105، لذا يبدو قسم البيانات المكتمل كما يلي:

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

إذا كان كل شيء يعمل بشكل صحيح، فعّل Zap.

15 إعجابًا

Can this workflow be used to automatically create an account for a new user and add them to a specific discourse group?

The use case here is someone buys a training product, I want to automatically then add them to the relevant discourse sub forum for that product.

I can get the new customer data into Zapier but the regular discourse zap doesn’t have create account capabilities - just wondering if I can do this via the API and webhook link as you describe in this example.

Thanks!

إعجابَين (2)

The easiest approach would be to send an invite email to the person after they make a purchase. You can setup the invite so that the user is automatically added to a Discourse group when they accept the invitation. See Automate sending Discourse invite emails with Zapier for details.

If sending invites is not an option for you, it should be possible to use a Zapier webhook to create a Discourse user. The Discourse API Docs give details about the request to create a user.

8 إعجابات

Thanks @simon I’ll try the email invite. No doubt some people won’t get it/find it/open it but it’s the easier option for sure.

Appreciate the speedy response too!

It’s often easier to have whatever is selling the thing make the discourse api calls directly.

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

Is there a reason why this works for me when I do it in Zapier, but I get an empty response when I try to do my own fetch request?

I’m using ObservableHQ, but the idea is the same. Shouldn’t this work?:

fetch("https://mycommunity.com/g.json", {
  headers: {
    "Content-Type": "multipart/form-data",
    "Api-Username": Secret("DISCOURSE_USERNAME"),
    "Api-Key": Secret("DISCOURSE_KEY")
  },
  method: "GET",
  mode: "no-cors"
})

Are you able to get any API requests to Discourse working with calls in that format with ObservableHQ? It seems that there must be something wrong with the format of the request.

You can also double check requests by making curl calls from your terminal, or by using Postman.

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

OK, I figured out what I needed to do:

  1. Install cors-anywhere locally and run the server
  2. Modify the request to include the reverse proxy before the API endpoint and call the json method in the Fetch Response object:
await (fetch("http://localhost:8080/mycommunity.com/g.json", {
  headers: {
    "Api-Username": Secret("DISCOURSE_USERNAME"),
    "Api-Key": Secret("DISCOURSE_KEY")
  },
})).json()
إعجابَين (2)

سأترك هذا هنا، قد يستحق الاطلاع عليه:

إعجابَين (2)

مرحبًا @سيمون، شكرًا لك على هذا الدليل. أقوم بإعداده في Zapier، لكن موقعي لا يحتوي على هذا الرابط لإصدار الشارات.

أتساءل، هل هذا ليس رابطًا قياسيًا لجميع تركيبات Discourse، أم أن الرابط قد تغير في تحديث حديث؟

يجب أن يحتوي عليه. ومع ذلك، فهذا ليس رابطًا يمكن زيارته عبر واجهة مستخدم Discourse. لقد قمت للتو بمراجعة المسار في موقعي باتباع الخطوات الموضحة هنا: كيفية عكس هندسة واجهة برمجة تطبيقات Discourse. بناءً على ذلك، يبدو أن التفاصيل المذكورة في الموضوع لا تزال محدثة.

إعجابَين (2)

لم يكن مفاجئاً، بل كان خطأي أنا.

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