كيفية دمج Gamification الخاص بـ Discourse مع نظام خارجي (استرداد ومنح النقاط)

منذ إطلاقنا Discourse Gamification قبل عام، كانت إحدى أكثر الميزات المطلوبة من خارطة الطريق لدينا هي إمكانية دمج Discourse Gamification مع أنظمة تحفيز خارجية. والأمثلة كثيرة:

  • التكامل مع برامج التحفيز الحالية في الشركات

  • القدرة على منح نقاط للأحداث التي تقع خارج Discourse، مثل الفعاليات الواقعية (IRL)، أو في أماكن أخرى عبر الإنترنت، مثل أن تكون عميلاً في مجتمع ما، أو شراء منتج.

  • القدرة على السماح للمستخدمين بتبديل نقاطهم مقابل سلع ترويجية (swag)، أو منتجات، أو مزايا.

اليوم، وفي الوقت المناسب للاحتفال بالذكرى السنوية الأولى للإضافة (plugin)، جعلنا كل ما سبق ممكنًا من خلال واجهة برمجة تطبيقات (API) كاملة للتعامل مع أحداث تسجيل النقاط المخصصة :tada:.

يتيح هذا النظام الجديد للمسؤولين (admins):

  • منح المستخدمين حدث تسجيل نقاط مخصص.

  • منح المستخدمين أحداث تسجيل نقاط سلبية، لاستيعاب أحداث الاسترداد أو العقوبات.

  • تحديث وسرد الأحداث المخصصة التي تم إنشاؤها مسبقًا.

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

:warning: ستستغرق النقاط الممنوحة عبر واجهة برمجة التطبيقات ما يصل إلى 10 دقائق لتنعكس في إجمالي نقاط المستخدم للأحداث التي تم إنشاؤها بالتاريخ الحالي، وما يصل إلى 24 ساعة للأحداث التي تم إنشاؤها في الأيام العشرة الماضية. بالنسبة للأحداث التي تم إنشاؤها بتاريخ يسبق الأيام العشرة الماضية، تحتاج إلى تشغيل مهمة rake الخاصة بالملء الخلفي (backfill).

هناك 3 نقاط نهاية مختلفة لواجهة برمجة التطبيقات حاليًا.

سرد الأحداث (List Events)

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

يمكنك أيضًا سرد أحداث مستخدم معين أو أحداث بتاريخ معين:

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json?user_id=1\u0026date=2023-05-01 \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

إنشاء حدث (Create Event)

curl -X POST https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 13,
  "date": "2023-04-14",
  "points": 15,
  "description": "May 2023 Karaoke attendee"
}'

صيغة بديلة باستخدام jo:

jo -p user_id="13" date="2023-04-14" points="15" description="May 2023 Karaoke atendee" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

تحديث حدث (Update Event)

curl -L -X PUT https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json?id=6 \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 11,
  "date": "2023-04-15",
  "points": 25,
  "description": "May 2023 keynote attendee"
}'

صيغة بديلة باستخدام jo:

jo -p id="11" points="25" description="May 2023 Karaoke attendee" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
28 إعجابًا

هل ستكون هناك طريقة للقيام بذلك من خلال واجهة المستخدم؟

9 إعجابات

هذا شيء سأفكر فيه إذا أراد عميل من فئة المؤسسات رعاية ذلك.

10 إعجابات

هذا لا يصدق. نحن في منتصف البدء وتجريب برنامج سفراء/أبطال، وقد استخدمنا Airtable لمراقبة خطافات الويب من مصادرنا المختلفة (Discourse، GitHub، Ghost) وتجميع برنامج الأبطال لدينا هناك. أنا متحمس لتجربة هذا ومعرفة ما إذا كان يمكن استخدامه لإدارة/مراقبة برنامجنا ومساهماتنا.

سيكون من الرائع إذا كان بإمكانك منح نقاط لمجموعة مستخدمين بدلاً من مستخدم. حالة الاستخدام بالنسبة لنا كعميل مؤسسي هي أننا نريد أساسًا منح نقاط للشركة التي يعمل بها المستخدمون وتجميع نقاطهم لكل شركة. ما مدى جدوى شيء كهذا؟

9 إعجابات

آه، لا أعرف كيف أستخدم هذا :smiling_face_with_tear:
نحن نستخدم خطة عمل.

أتمنى لو كان بإمكاننا تشغيل هذا عبر واجهة المستخدم.

ولكن مع ذلك، شكراً لكم على بناء هذا الفريق! واصلوا العمل الجيد.

5 إعجابات

قد يساعد ذلك في منح نقاط لمرة واحدة داخل Discourse باستخدام Automation plugin؟

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

كيف تعمل عملية استرداد النقاط؟ أرى أن هناك حدث تحديث يمكن استخدامه لخصم النقاط من أحداث فردية، ولكن هذا يبدو طريقة غير فعالة لاسترداد النقاط.

بالإضافة إلى ذلك، عند محاولة سرد الأحداث في مثيل discourse الخاص بي، أحصل على 404.

GET https://developer.sailpoint.com/discuss/admin/plugins/gamification/score_events.json

404 غير موجود
“لم يتم العثور على عنوان URL أو المورد المطلوب.”

لقد قمت بتمكين المكون الإضافي ويمكنني تكوينه من خلال واجهة المستخدم. هل فاتني شيء لتمكين واجهة برمجة تطبيقات النظام الخارجي؟

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

قد يكون ذلك بسبب خبرتي التي تمتد لعقد من الزمان في العمل بالبنوك، ولكن الطريقة التي أتخيل بها استرداد النقاط هي إصدار أحداث مخصصة ذات قيمة سالبة.

على سبيل المثال، لنفترض أن لديك مستخدمًا يريد استرداد النقاط مقابل قميص، ويكلف هذا القميص 10 آلاف نقطة. سيكون التدفق في نظام الاسترداد الخاص بك:

  1. التحقق مما إذا كان لدى المستخدم نقاط كافية:
curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
  1. إصدار حدث “سحب النقاط”
jo -p user_id="13" date="2023-04-14" points="-10000" description="T-Shirt Redeem - order #123" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

ستحتاج إلى تغليف هذا في نوع من آلية الحماية (semaphore)، حيث أن هذا هو المثال النموذجي لاستخدامها، ولكن هذا هو جوهر سير العمل المقترح.

هذه ميزة حديثة جدًا، لذا دعني أعرف إذا كان سير العمل المقترح لا يعمل بشكل صحيح.

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

3 إعجابات

حسنًا، هذا ما كنت أفتقده. لم أكن أدرك أنه يمكنك إصدار نقاط سلبية. يجب أن يعمل هذا بشكل مثالي إذن.

:man_facepalming: كنت أستخدم بيانات اعتماد منتهية الصلاحية. شكرًا لك على التأكيد على أي حال.

إعجابَين (2)

@Falco

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

3 إعجابات

هذه فكرة جيدة، لكنني شخصياً لا أملك النطاق الكافي للعمل على هذا في المستقبل القريب.

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

3 إعجابات

أواجه نفس المشكلة هنا:

{"errors":["لم يتم العثور على عنوان URL أو المورد المطلوب."],"error_type":"not_found"}

كان هذا الخطأ ناتجًا عن

إذًا، هل تريد التحقق من بيانات الاعتماد الخاصة بك :wink:

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

شكرًا، سأقوم أيضًا بالتحديث إلى أحدث إصدار كإجراء احترازي

التحديث إلى الأحدث نجح! شكرا لك

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

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

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

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

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

شكرا!

لا، الميزة تعتمد بنسبة 100% على واجهة برمجة التطبيقات. يمكنك استدعاء نقطة نهاية “List Events” للتحقق من الأحداث كما هو موضح في OP.

3 إعجابات