إنشاء مستخدم Discourse من طلب Zapier

أحاول إنشاء مستخدم نشط باستخدام واجهة برمجة التطبيقات.

يعمل هذا من curl:

curl -X POST "https://community.co/users.json" -H "Api-Key: $API_KEY" -H "Api-Username: system" -H "Content-Type: multipart/form-data" -F "name=XXXXApp Tester" -F "email=XXXapptester2@example.com" -F "username=XXXapptester21" -F "active=true" -F "approved=true" -F "password=simplepass"

عندما أقوم بنفس الاستدعاء من Zapier (أرى أن Parameters في production.log تبدو متشابهة)، فإنه يحتوي على هذا في السجلات:

تم إيقاف سلسلة المرشحات حيث تم عرض أو إعادة توجيه :respond_to_suspicious_request

ولا يحدث شيء.

هل هناك طريقة لتجاوز هذا؟

  def suspicious?(params)
    return false if current_user && is_api? && current_user.admin?
    honeypot_or_challenge_fails?(params) || SiteSetting.invite_only?
  end
إعجابَين (2)

أفترض أنه يفشل في is_api?. بالنظر إلى الكود، ليس من الواضح لي لماذا سيفشل هذا مع الطلب من Zapier، ولكن لا يمكنني رؤية أي مكان آخر سيفشل فيه.

أنا مهتم بهذا لأن شخصًا ما كان يسألني عن نفس المشكلة مع إنشاء مستخدمين عبر Zapier قبل بضعة أسابيع.

إعجابَين (2)

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

أخمن أنه نفس الشخص. :slight_smile:

إعجابَين (2)

نعم. أنا متفاجئ لأن هذا لا يعمل، ولكن على الأقل أعرف الآن أنه ليس أنا فقط.

أنا أنظر في هذا النهج لاستخدام قاعدة بيانات خارجية وأداة أتمتة مثل Zapier أو Make (كنت أحصل على أخطاء مماثلة على Make) كإثبات مفهوم لبرنامج تجريبي.

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

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

أعتقد أن المشكلة تتعلق بكيفية تنظيمك للطلب على Zapier. باستخدام إجراء Webhooks by Zapier، جرب ما يلي:

حدد “POST” كحدث. ثم:

URL: <https://forum.example.com/users.json>

نوع الحمولة: “json”

البيانات:

  • name: <اسم المستخدم الكامل> (يظهر كإلزامي في المستندات، ولكن يجب أن يكون جيدًا تركه)
  • username: اسم المستخدم
  • email: البريد الإلكتروني للمستخدم
  • password: كلمة مرور تلبي متطلبات موقعك
  • active: "true" (بين علامتي اقتباس)
  • approved: "true" (بين علامتي اقتباس)

املأ قسم الرؤوس لإضافة Api-Key و Api-Username (لقد جربت هذا فقط مع system كـ Api-Username.

استخدم القيم الافتراضية لجميع الأقسام الأخرى.

إليك زوج من لقطات الشاشة ببيانات وهمية:

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

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

ملاحظات من اختبارات إضافية:

  • يمكن تعيين نوع الحمولة على “json” أو “form”. لتعيين حقول مخصصة مع الطلب، يجب تعيين نوع الحمولة على “form”.

  • الحقول المخصصة متعددة التحديد تمثل مشكلة إلى حد ما. لن يسمح Zapier بأسماء مفاتيح مكررة في قسم البيانات. يجب أن يكون من الممكن تعيين حقول مخصصة متعددة التحديد باستخدام إجراء Zapier “Custom Request”.

  • لا يلزم تغليف قيم المعلمات active و approved بعلامات اقتباس.

إعجابَين (2)

@simon شكراً! لقد نجحت في ذلك! لقطة الشاشة الخاصة بك ساعدتني في حل المشكلات المتعلقة بكيفية قيام Zapier بإنشاء حقول البيانات. لقد كان يقوم ببعض الأشياء الغريبة ولكنني لم أفهم أساسًا كيفية تنسيق / تعيين البيانات إلى airtable. أحتاج إلى جعل الأتمتة من البداية إلى النهاية تعمل ولكن إنشاء المستخدم نجح بالتأكيد.
للعلم @pfaffman

4 إعجابات

مرحباً @simon - شكراً مرة أخرى على المساعدة في التنسيق. الآن أحاول إضافة بعض الحقول المخصصة إلى ملف تعريف المستخدم وأرى ما إذا كان بإمكاني جعل Zapier يقوم بتعبئتها في مستخدم Discourse جديد. يبدو أن هذا يتسبب في فشل الطلب بأكمله وأتلقى رسالة “لم تقم بإكمال جميع حقول المستخدم”.

لقد وجدت هذه المشاركة لذا حاولت التبديل من json إلى form ولكن ذلك لم ينجح.

أي نصائح حول كيفية تنسيق حقول الملف الشخصي المخصصة؟ شكراً!

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

تغيير نوع الحمولة إلى “form” يعمل معي:

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

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

رائع - أنت حقًا الساحر الأعظم لـ zapier + discourse. تغيير السهم الأحمر وعمل في المحاولة الأولى. لقد كان اسم الحقل، ولكن بالطبع هذا لا معنى له نظرًا لأنني لن أعرف ذلك في المنبع. لذا لكل حقل جديد أقوم بإنشائه، أستخدم فقط [#] وسيقوم تلقائيًا بتعيينها بالترتيب؟ أخطط للكثير - ربما حوالي 10. أيضًا، بدا أنه يعمل بشكل جيد على الرغم من أن حقل الاختبار الخاص بي هو قائمة منسدلة - ربما لأنه يسحبه فقط من Airtable؟

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

في الواقع - لم أقم بإجراء اختبار شامل حقيقي. لقد اختبرت الـ zap فقط ولكنه عمل على حقل القائمة المنسدلة.

نعم، فقط ضع id الحقل في []. يمكنك الحصول على id الحقل عن طريق تحميل النسخة JSON من صفحة المستخدم الخاصة بك في المسؤول / التخصيص / حقول المستخدم (/admin/customize/user_fields.json)

(من الأسهل القراءة إذا كان لديك امتداد للمتصفح يقوم بتنسيق JSON.)

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

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

آه الاختيار المتعدد - نعم لقد فاتني هذا الجزء. لدي فقط قائمة منسدلة للاختيار الفردي في الوقت الحالي.

هذا رائع. شكرًا!!!

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

أتساءل عما إذا كان من الممكن فتح هذا مرة أخرى والسؤال عن إنشاء مجموعات؟

  • يمكنني إنشاء مستخدمين من Zapier دون مشكلة (حتى عندما يكون دعوة فقط قيد التشغيل) :white_check_mark:

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

فشل إنشاء إجراء مخصص في Discourse

فشل الطلب الخام. مشكلة في تنفيذ طلبك: رمز الخطأ 400: المعلمة مفقودة أو القيمة فارغة: مجموعة

هل هناك طريقة يمكنني من خلالها إرسال هذا الكائن الأولي group { وإغلاقه مرة أخرى باستخدام Zaiper؟

أي رؤى ستكون مذهلة وموضع تقدير كبير!

لقد قمت بحلها - كان عليّ استخدام Webhooks الخاصة بـ Zapier في الوضع المخصص بالكامل حتى أتمكن من إدخال جميع رؤوس الطلب يدويًا أيضًا.

ثم قمت بلصق البيانات في منطقة البيانات/الجسم وعملت … لم تعمل في أي وضع آخر.

3 إعجابات